14

嗨,我的脚本中有 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");
        }
    });
}

那么有什么想法吗?谢谢

4

4 回答 4

18

如果使用 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 ]
});

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

于 2012-04-23T21:19:59.630 回答
1

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

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

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

由于 JavaScript 不会在客户端的多个线程中运行,因此在满足某些条件之前,您不能阻塞线程。

于 2012-04-23T21:17:49.917 回答
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");
        }
    });
于 2014-12-08T15:34:56.293 回答
0

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

海报说你最好让成功方法启动一个新的ajax请求..”

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

于 2012-04-23T21:25:25.363 回答