jQuery等到async ajax调用完成

嗨我在我的脚本中有2个ajax调用,我需要它们运行asnyc来腾出时间,但我需要第二个等到第一个完成。

$.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"); } }); 

那么任何想法? 谢谢

如果使用jQuery 1.5+,您可以使用jQuery.when()来完成此任务。 类似的东西(缩短了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 ] }); 

您不知道它们将以何种顺序返回,因此如果您手动滚动它,则需要检查另一个请求的状态并等待它返回。

您需要连接第二个调用以包含在第一个ajax调用的回调中。 像这样:

 success: function(msg) { alert(msg.d.data); if(par02.length > 0) { // Your 2nd ajax call } }, 

由于JavaScript不会在客户端上的多个线程中运行,因此在满足某些条件之前无法阻止该线程。

使用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"); } }); 

这是运行双ajax请求的另一个答案。 与Tejs一样,用户在成功方法中进行ajax调用…

海报声明你最好让成功方法发布一个新的ajax请求。“

在一个脚本中有两个$ .ajax()调用