3

クライアント側で$.ajax()を使用してこれらのメソッドが呼び出されるページでwebMethodを作成しました。最初のWebmethodは、時間のかかるタスクに取り組んでいます。タスクの完了には8分以上かかります。最初のメソッドをajax呼び出しした直後に、別のWebメソッドを呼び出しています。これは1秒または2秒で終了します。したがって、2番目のWebMethodajax呼び出しからすぐに応答を取得する必要があります。ただし、ここでは、この場合、最初の呼び出しが終了するまで2番目のWebメソッドが実行されません。以下の例は、私のシナリオをシミュレートします。

[WebMethod]
public static string PullData(int snapshotId)
{
    string str = "Pull Started: " + DateTime.Now.ToString() + "\n";
    Thread.Sleep(30000);
    str += "Pull End: " + DateTime.Now.ToString();
    return new JavaScriptSerializer().Serialize(str);
}

[WebMethod]
public static string CheckStatus(int snapshotId)
{
    return new JavaScriptSerializer().Serialize("Check Status" + DateTime.Now.ToString());
}

以下は、ボタンクリック時のJavascript呼び出しです。

   <script src="Scripts/jquery-1.4.1.min.js" type="text/javascript"></script>

    <script language="javascript" type="text/javascript">

         function pullData(){

             $.ajax({ type: 'POST',
                 url: 'Default.aspx/PullData',
                 data: '{ snapshotId: 101 }',
                 contentType: 'application/json; charset=utf-8',
                 dataType: 'json',
                 success: function (msg) {
                     var curMsg = $("#message").attr("innerHTML") + "<br />";
                     $("#message").attr("innerHTML", curMsg + msg.d);
                 },
                 error: function (jqXHR, textStatus, errorThrown) {
                     alert(jqXHR.responseText);
                 }
             });

            CheckStatus();
            return false;
        }


        function CheckStatus() {
            //alert("this is check status");
            $.ajax({ type: 'POST',
                url: 'Default.aspx/CheckStatus',
                data: '{ snapshotId: 101 }',
                contentType: 'application/json; charset=utf-8',
                dataType: 'json',
                success: function (msg) {
                    var curMsg = $("#message").attr("innerHTML") + "<br />";
                    $("#message").attr("innerHTML", curMsg + msg.d);
                },
                error: function (jqXHR, textStatus, errorThrown) {
                    alert(jqXHR.responseText);
                }
            });

            return false;
        }

    </script>

上記の呼び出しでは、PullDataメソッドが応答を返す前に、CheckStatusメソッドが応答を返す必要があります。ただし、PullDataがジョブを終了した後にCheckStatusが実行されます。

私はここで行方不明になっているか、完全な動作に気付いていない可能性があります。助けてください!!!

誰かがこの問題に遭遇しましたか?

4

1 に答える 1

3

複数のAJAXリクエストを同時に実行することはできないことがわかりました。ただし、リクエストは非同期ですが、それらはキューに入れられます。最初のリクエストが成功/失敗のステータスで終了するまで、次のリクエストはサーバーに送信されません。最終的には複数のリクエストを同時に実行しましたが、前のリクエストが終了するまでサーバーに送信されません。

于 2013-02-20T20:20:45.553 に答える