Jquery ajax执行顺序响应

时间:2017-05-16 14:24:47

标签: jquery ajax

在我的插件中,我想顺序ajax调用和响应,因为下一个响应取决于前一个。 不幸的是,响应与调用顺序不匹配(我不想使用async:false),所以我应该处理这个问题。

var array = ['a', 'b', 'c', ...]; <- dynamic values
var params = ['foo', 'bar', 'doe', ...]; <- dynamic values
var postData = {};

$.each ( array, function ( idx, val ) {
    postData.value = val;
    var param = params[idx];
    ajaxRequest( param, callback );
});

var ajaxRequest = function ( param, callback ) {
    $.ajax ({
        url: url,
        data: postData,
        type: "POST"
    }).done ( function ( data ) {
        //a returned data in 5 sec
        //b returned data in 3 sec
        //c returned data in 1 sec
    });
}

我已经阅读了一些有关ajax承诺和推迟的内容,但我不知道IF以及它如何能够成为我的场景的正确解决方案
我怎么能这样做?
谢谢

1 个答案:

答案 0 :(得分:1)

你可以使用&#34;完成&#34; ajax请求的功能,以确保请求按顺序链接在一起,因为在请求成功完成之前,此回调不会执行。这样的事情(未经测试):

var arr = ['a', 'b', 'c', ...];
var params = ['foo', 'bar', 'doe', ...];
var arrIndex = 0;

function ajaxRequest() {
   console.log("Request " + arrIndex + " starting");
    var postData = { value: arr[arrIndex] };
    var param = params[arrIndex];

    $.ajax ({
        url: url,
        data: postData,
        type: "POST"
    }).done ( function ( data ) {
      console.log("Request " + arrIndex + " completed");
      arrIndex++;
      if (arrIndex < arr.length) {
        ajaxRequest();
      }
      else {
          console.log("All requests completed");
      }
    });
}

我不确定&#34; param&#34;的目的是什么?是的,因为你似乎没有在这个例子中使用它,但我已经把它留在了,以防万一你真的需要它。 &#34;回调&#34;似乎什么都不做,所以我忽略了这一点。

如果任何特定请求失败,您可能还想考虑该怎么做 - 我假设您无法继续,所以也许您只需记录错误,但我会留给您。< / p>