我有一个值数组(myarray
),我想迭代并在每次迭代时运行一个AJAX请求。我已将每个ajax请求放在另一个数组(requests
)中,这样我就可以在所有AJAX请求完成后调用alert
:
像这样:
var requests = [];
for (i = 0; i < myarray.length; ++i) {
requests.push($.ajax({
url: 'anotherurl?=' + myarray[i],
dataType: "JSONP",
success: function (data) {
array_of_results.push(data);
}
}));
}
$.when.apply($, requests).done(function() {
alert('complete');
});
所有结果都收集在array_of_results
中。但是由于AJAX请求需要不同的时间来完成,因此该数组不会按原始顺序生成结果。
有没有办法订购这个阵列?
我希望我有道理。我很欣赏这是非常令人费解的。
答案 0 :(得分:7)
您是否尝试过以下操作?我认为这应该有效。所有回复都应该按顺序在when()
的成功函数中提供。
var requests = [];
for (i = 0; i < myarray.length; ++i) {
requests.push($.ajax({
url: 'anotherurl?=' + myarray[i],
dataType: "JSONP"
}));
}
$.when.apply($, requests).done(function() {
array_of_results = arguments;
alert('complete');
});
答案 1 :(得分:1)
考虑使用递归而不是使用循环。这是一个完整的例子:
var myArray = [
"somevalue",
"some other value",
"another value"
];
var i = myArray.length;
var responses = [];
function doRequests(){
i--;
$.ajax({
url: "myurl.php",
data: {paramname: myArray[i]}
}).done(function(response){
responses.push(response);
if(i>0) doRequests();
else{
// all requests sent.. do stuff
// responses array is in order
console.log(responses);
alert("all done!");
}
});
}
答案 2 :(得分:1)
您可以为PF
对象添加自定义属性,设置为$.ajax
var。
i
JavaScript真的很有用,如果你将一个值归入一个超出其边界的数组(大于0),那么数组的大小将被自动设置为正确的数量。
答案 3 :(得分:-1)
如何使用异步设置的jquery.ajax调用为false。这样,reaponse将按要求按顺序排列......
答案 4 :(得分:-1)
以@Christo的答案为基础 - 使用数组映射函数
var array_of_results = [];
var requests = myarray.map(function(item, index) {
return $.ajax({
url: 'anotherurl?=' + item,
dataType: "JSONP",
success: function (data) {
array_of_results[index] = data;
}
}
});
...