0

呼び出しがjquery ajax関数からのものであるWebサービスを作成しました。しかし、asyncを true に設定しても、非同期的には機能しません。

私の ASP.NET Web サービス コード

<System.Web.Services.WebMethod()> _
Public Shared Function sampleService(ByVal ttid As String) As String
Threading.Thread.Sleep(5 * 1000)
Return "Hello World"
End Function

JQuery 呼び出しスクリプト

<script language="javascript">
$(function() {
    var tempParam = {
        ttid: 100
    };

    var param = $.toJSON(tempParam);
    $.ajax({
        type: "POST",
        url: "testservice.aspx/sampleService",
        data: param,
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        async: true,
        error: function() {
            alert("Error");
        },
        success: function(msg) {
            alert("Success")
            alert(msg.d)
        }
    });
});​    </script>

ここでは async = true に設定しています。それでも、5秒後に成功メッセージが表示されます。つまり、非同期ではありません。私が信じているのは、async = true の場合、Web サービスからのメッセージを待たないということです。それは実際に私の要件です。

4

3 に答える 3

3

成功関数はコールバックです。応答を受信した後に呼び出されるように設計されています。サーバースレッドの実行が完了する前に呼び出された場合、成功またはエラーをどのように判断できますか?Sleepの呼び出しは現在のサーバースレッドを一時停止するため、もちろん応答が戻るまでに5秒かかります。

非同期部分は、ajax投稿の直後に続くJavascriptコードに適用されます。例えば:

<script language="javascript">
$(function() {
    var tempParam = {
        ttid: 100
    };

    var param = $.toJSON(tempParam);
    $.ajax({
        type: "POST",
        url: "testservice.aspx/sampleService",
        data: param,
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        async: true,
        error: function() {
            alert("Error");
        },
        success: function(msg) {
            alert("Success")
            alert(msg.d)
        }
    });
    alert('This alert is asynchronous!  We do not know yet if the ajax call will be successful because the server thread is still sleeping.');
});​    </script>
于 2012-04-09T05:45:24.797 に答える
2

ここでは async = true に設定しています。それでも、5秒後に成功メッセージが表示されます。つまり、非同期ではありません。私が信じているのは、async = true の場合、Web サービスからのメッセージを待たないということです。

いいえ、async作業スレッドがロックされており、サーバーからの要求に対する応答を取得するまで、他のコードを実行しない (ウィンドウがフリーズする可能性がある) ことを意味します。
すぐに答えが返ってくるとは限りません!

于 2012-04-09T05:35:55.633 に答える
-1

Web サービスがスクリプトで実行するように設定されていることを確認しましたか。

// To allow this Web Service to be called from script, using ASP.NET AJAX, uncomment the following line. 

[System.Web.Script.Services.ScriptService]

これを確認して、動作するかどうかを確認してアップデートを送信してください。

于 2012-04-09T05:35:17.143 に答える