Jquery .When()和.done()使用带有.done的数组

Jquery .When()和.done()使用带有.done的数组,jquery,Jquery,我正在编写一个google内容脚本,我的程序需要对服务器进行大约30次AJAX调用。我将JQuery的.when函数与.apply结合使用,以将数组传递给.when函数。我还使用了.done,我希望能够传入一个参数数组,该数组将接受.when函数中的延迟对象。有没有办法做到这一点?这就是我想做的 var callback = function(a) { console.log("done", a); }; var requests = []; var requestArray = [

我正在编写一个google内容脚本,我的程序需要对服务器进行大约30次AJAX调用。我将JQuery的.when函数与.apply结合使用,以将数组传递给.when函数。我还使用了.done,我希望能够传入一个参数数组,该数组将接受.when函数中的延迟对象。有没有办法做到这一点?这就是我想做的

    var callback = function(a) {
  console.log("done", a);
};
var requests = [];
var requestArray = [];
  for(i = 0; i < liclass.length; i++) {
  requests.push($.ajax({
      url: liclass[i],
     success: function() {;
      }
    }));
            var str = "messageArg" + i
        requestArray.push(str)
  }

$.when.apply($, requests).done(function(requestArray){
callback(requestArray)});
var callback=函数(a){
console.log(“完成”,a);
};
var请求=[];
var requestArray=[];
对于(i=0;i
如果查看,您会看到回调会为每个承诺传递一个参数。若这个承诺来自Ajax调用,那个么每个参数都是一个数组,其形式为
[data,statusText,jqXHR]

因此,您只需迭代参数并提取第一个元素<代码>$。地图
使之非常简单:

$.when.apply($, requests)
  .then(function() {
    return $.map(arguments, function(v) {
      return v[0];
    });
  })
  .done(callback);

您是否希望将ajax响应放在一个数组中,并在所有ajax调用返回时执行回调?实际上,您可以从传递给
.done()
的参数中获取这样一个数组

根据报告:

  • 如果您对
    $返回的承诺调用
    .done()
    。当 传递了一个延迟的ajax请求,这是回调的第一个参数 函数将是响应数据
  • 如果您对
    $返回的承诺调用
    .done()
    。当 传递了多个ajax请求延迟,“参数将是 请求的jqXHR对象,按照 参数列表。”那句话似乎有点不准确, 然而,因为示例中的一条注释指出:“每个参数都是 具有以下结构的数组:[data,statusText,jqXHR]
  • 因此,您可以尝试:

    var requests = $.map(liclass, function(url) {
        return $.ajax(url);
    });
    
    $.when.apply($, requests).done(function() {
        var results = (requests.length > 1)
            ? $.map(arguments, function(a) { return a[0]; })
            : [arguments[0]];
        console.log(results);
    });
    

    我对延迟的东西(和jQuery一般来说)是相当陌生的,但是我下面的助手函数似乎可以工作。没有一个请求在数据方面相互依赖。我可能会编写一个类似的helper函数来处理链式请求,它必须使用.then()


    你想做什么?为什么在done()回调中使用相同的名称作为参数(该参数应该是数据),对于某些填充了字符串的数组,以及现在不起作用的内容,是否存在任何错误等?看起来您只需将
    函数(requestArray)
    更改为
    函数()
    这样您就不会在函数外部隐藏您创建的变量。只传入回调如何
    $.when.apply($,requests).done(回调)这帮我解决了一个类似的问题。非常感谢。
    
    function sendRequests(requests, callbacks) {
        $.when(...requests).done(function(...results) {
                results.forEach(function(result, index) {
                        callbacks[index](JSON.parse(result[0]));
            });
        });
    }
    
    function req1Callback(data) {
        // do something with data object
    }
    
    var req1 = $.get(), // arguments omitted
        req2 = $.get(),
        req3 = $.get();
    
    sendRequests([ req1, req2, req3 ], [ req1Callback, req2Callback, req3Callback ]);