jQuery 等到异步 ajax 调用完成

jQuery Wait until async ajax calls are finished

本文关键字:调用 ajax 异步 jQuery      更新时间:2023-09-26

嗨,我的脚本中有 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() 调用