【问题标题】:multiple ajax call not working asynchronously多个ajax调用不能异步工作
【发布时间】:2013-02-09 21:22:29
【问题描述】:

我已经在页面上创建了 webMethod,这些方法将在客户端使用 $.ajax() 调用。第一个 Webmethod 正在处理耗时的任务。任务需要 8 分钟以上才能完成。在对第一个方法进行 ajax 调用后,我立即调用另一个 Web 方法,该方法在一秒或 2 内完成。所以我应该立即从第二个 WebMethod ajax 调用中获得响应。但是在这里,在这种情况下,第二个 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>

在上面调用 CheckStatus 方法应该返回响应,在 PullData 方法返回响应之前。但 CheckStatusPullData 完成其工作后执行。

我可能在这里失踪或不知道完整的行为。请帮忙!!!

有人遇到过这个问题吗?

【问题讨论】:

    标签: jquery webmethod


    【解决方案1】:

    我发现不能同时执行多个AJAX请求。但是,请求是异步的,但那些进入队列。在第一个请求以任何状态成功/失败完成之前,下一个请求不会发送到服务器。最终我们同时执行了多个请求,但它直到之前的完成才进入服务器。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-05-10
      • 1970-01-01
      • 1970-01-01
      • 2020-07-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多