Javascript 尝试使用延迟对象和$。何时进行多个AJAX调用
因此,基于这篇关于Medium()的教程,我尝试使用延迟数组、ajax请求和jQuery.when方法生成多个ajax请求并从每个请求中获得结果 这是我正在做的代码Javascript 尝试使用延迟对象和$。何时进行多个AJAX调用,javascript,jquery,ajax,Javascript,Jquery,Ajax,因此,基于这篇关于Medium()的教程,我尝试使用延迟数组、ajax请求和jQuery.when方法生成多个ajax请求并从每个请求中获得结果 这是我正在做的代码 function updateAllGoingButtons(){ var dataToPass = {}; var deferreds = []; $('.btn-group').find('button').each(function(){ console.log($(this).attr
function updateAllGoingButtons(){
var dataToPass = {};
var deferreds = [];
$('.btn-group').find('button').each(function(){
console.log($(this).attr('id'));
dataToPass.button = $(this).attr('id');
var ajax = $.ajax({
url: '/update-buttons',
method: 'post',
data: dataToPass,
dataType:'json'
});
deferreds.push(ajax);
$.when.apply($, deferreds).then(function(){
});
});
}
我对如何使用$.when函数以及在哪里可以访问返回到ajax调用的数据感到困惑
我尝试插入一个简单的成功选项,但它没有进入回调函数。我该怎么做 你只是在打电话给
而太早了。在开始所有ajax调用并在阵列中得到它们的承诺后,在每个循环之外执行:
function updateAllGoingButtons(){
var dataToPass = {};
var deferreds = [];
$('.btn-group').find('button').each(function(){
console.log($(this).attr('id'));
dataToPass.button = $(this).attr('id');
var ajax = $.ajax({
url: '/update-buttons',
method: 'post',
data: dataToPass,
dataType:'json'
});
deferreds.push(ajax);
});
$.when.apply($, deferreds).then(function(){ // <=== Moved this
// <===
}); // <===
}
好的,但我仍然不知道如何从$.when方法内部访问传递回AJAX调用的数据!我该怎么做?当我试图从该方法内部控制台.log(deferreds)时,我没有得到任何输出。@ZaidHumayun:如中所述:“传递给doneCallbacks的参数为每个deferreds提供解析值,并与传递给jQuery.When()的deferreds的顺序相匹配”(后面是一个示例;在该页面上搜索“pizza”). 基本上:结果是回调的离散参数。我似乎误解了这一点。在文档中,延迟对象看起来是显式解析的,而我只是使用res.send返回数据。我的案子还有效吗?因为我尝试传递参数并将它们记录在then回调中,但没有成功<代码>$.when.apply($,延迟)。然后(函数(a,b,c,d,e){console.log(a);console.log(b);console.log(c);console.log(d);})代码>@ZaidHumayun:是的。在那个例子中,他们正在创建和解析延迟,但在您的用例中,您正在使用由ajax
@ZaidHumayun创建和解析的延迟:是的,如果调用都成功,您应该从那些console.log语句中看到一些东西;我知道:听起来好像至少有一个电话出错了。由于您没有将第二个函数传递给然后
,因此不会收到错误通知。注意,在ajax的情况下,每个结果都是一个包含三个条目的数组(对应于通常会得到的三个参数success
,因此您通常需要[0]
)。
$.when.apply($, deferreds).then(
function() {
var n;
for (n = 0; n < arguments.length; ++n) {
console.log("Result " + n, arguments[n][0]);
}
},
function() {
// At least one request failed
}
);