2013-02-09 51 views
2

我已经创建了webMethod在页面上,那些方法将在客户端用$ .ajax()调用。第一个Webmethod正在处理耗时的任务。任务需要超过8分钟才能完成。在对第一个方法进行ajax调用之后,立即调用另一个Web方法,该方法在一秒或两秒钟内完成。因此,我应该立即从第二个WebMethod ajax调用中获得响应。但在这里,在这种情况下,第二个Web方法不会执行直到第一个呼叫完成。以下示例模拟我的场景。多个Ajax调用不是异步工作

[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方法返回的响应。但CheckStatus执行后PullData完成其工作。

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

有没有人遇到过这个问题?

回答

2

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