2012-04-23 118 views
12

嗨我的脚本中有2个Ajax调用,我需要他们运行asnyc业余时间,但我需要第二个等待,直到第一个完成。jQuery等待,直到异步阿贾克斯调用完成

$.ajax({ 
     type: "POST", 
     url: "getText.asmx/ws_getText", 
     data: parO1, 
     contentType: "application/json; charset=utf-8", 
     dataType: "json", 
     success: function (msg) { 
      alert(msg.d.data); 
     } 
     , error: function() { 
      chyba("chyba v požadavku", "df"); 
     } 
    }); 
    if (parO2.length > 0) { 
     $.ajax({ 
      type: "POST", 
      url: "getText.asmx/ws_getText", 
      data: parO2, 
      contentType: "application/json; charset=utf-8", 
      dataType: "json", 
      success: function (msg) { 
       /*WAIT UNTIL THE FIRST CALL IS FINISHED AND THAN DO SOMETHING*/ 
      } 
     , error: function() { 
      chyba("chyba v požadavku", "df"); 
     } 
     }); 

那么有什么想法?谢谢

回答

15

如果使用jQuery 1.5+,则可以使用​​来完成此操作。喜欢的东西(简称为简洁的AJAX调用,只传递对象为你完成以上工作)

$.when($.ajax("getText.asmx/ws_getText"), 
     $.ajax("getText.asmx/ws_getText")).done(function(a1, a2){ 

    // a1 and a2 are arguments resolved for the 
    // first and second ajax requests, respectively 
    var jqXHR = a1[2]; // arguments are [ "success", statusText, jqXHR ] 
}); 

你不知道哪个顺序,他们将返回,所以如果你用手滚动这一点,你会需要检查另一个请求的状态并等到它返回。

1

您需要将第二个调用连接到第一个ajax调用的回调中。像这样:

success: function(msg) 
{ 
    alert(msg.d.data); 

    if(par02.length > 0) 
    { 
     // Your 2nd ajax call 
    } 
}, 

由于JavaScript的犯规在多线程的客户端上运行,直到某些条件得到满足,你不能阻塞线程。

+0

,但是这会让执行时间长,因为第二个呼叫将被启动后的第一个结束,我在想是这样的:在第一次调用成功,我可以将某些变量设置为true,并在第二次呼吁成功,我可以做到while(变量== false){等待}并继续,但我不知道如何正确写入 – user1352324 2012-04-23 21:28:20

+0

执行'等待'的唯一方法是'setTimeout',然后检查您的全局变量。但从技术上讲,这意味着您的超时可能在通话结束后发生,但仍在等待。只需向用户显示一个旋转的gif或其他内容以指示服务器正在工作就可以了。 – Tejs 2012-04-23 21:30:01

1

使用jQuery的

$.ajax({ 
     type: "POST", 
     async:false, // ** CHANGED ** 
     url: "getText.asmx/ws_getText", 
     data: parO1, 
     contentType: "application/json; charset=utf-8", 
     dataType: "json", 
     success: function (msg) { 
      alert(msg.d.data); 
     } 
     , error: function() { 
      chyba("chyba v požadavku", "df"); 
     } 
    }); 
+0

感谢您的回答。我通过添加一些代码格式来编辑它以提高可读性。 – vlasits 2014-12-08 15:39:33

+0

@vlasits似乎没有像大家想象的那样大胆,我提交了一个带有评论的编辑以解释发生了什么 – flyingfisch 2015-03-17 18:39:51