jqueryajax执行顺序响应

jqueryajax执行顺序响应,jquery,ajax,Jquery,Ajax,在我的插件中,我想依次调用ajax和响应,因为下一个响应取决于上一个响应。 不幸的是,响应与调用顺序不匹配(我不想使用async:false),因此我应该处理这个问题 var array = ['a', 'b', 'c', ...]; <- dynamic values var params = ['foo', 'bar', 'doe', ...]; <- dynamic values var postData = {}; $.each ( array, function ( id

在我的插件中,我想依次调用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
    });
}
var数组=['a','b','c',…] 您可以使用ajax请求的“done”函数来确保请求按顺序链接在一起,因为在请求成功完成之前不会执行此回调。类似这样(未经测试):

var arr=['a','b','c',…];
变量参数=['foo','bar','doe',…];
var指数=0;
函数ajaxRequest(){
日志(“请求”+ARRDINDEX+“启动”);
var postData={value:arr[arrIndex]};
var param=params[arrIndex];
$.ajax({
url:url,
数据:postData,
类型:“职位”
}).完成(功能(数据){
日志(“请求”+ARRDINDEX+“完成”);
arrIndex++;
如果(arr索引
我不确定“param”的目的是什么,因为您在示例中似乎没有使用它,但我将它保留在了中,以防您在实际中需要它。“回调”似乎什么也没做,所以我忽略了这一点


你可能也想考虑一下,如果有一个特定的请求失败了,我想你不能继续,所以也许你只需要记录错误,但是我会把它留给你。

谢谢你的回答,但是问题是如何通过调用每个循环中的Ajax请求来处理你的代码。Params和callback(我省略了它们)在我的代码中很重要。这个逻辑相当于each循环。本质上,对“ajaxRequest()”的每次调用都相当于“循环”的一次迭代,计数器(arrIndex)每次手动递增。我保留了您看到的“params”对象,因此您可以自己添加任何需要使用的内容,但我忽略了“callback”,因为我甚至看不到它是如何定义的,更不用说它是如何使用的,所以很难知道如何/在何处包含它。你可以把它放回你自己,或者如果你解释得更多,我可以试着让它符合逻辑。我理解逻辑。我需要检查如何修改插件的方法,以便以这种方式处理它。回调必须在完成请求时定义。承诺和延期在这种情况下不能使用吗?谢谢,$.ajax返回一个延迟对象/承诺-这就是为什么可以使用.done()来处理它。
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");
      }
    });
}