我想写这个函数:
function getResults(nums){
var results = [];
for(var i = 0, len = nums.length; i < len; i++){
var num = nums[i];
ajaxGet("http://xxx.com/" + num, function(data){
results.push(data);
});
}
return results;
}
var results = getResults([12, 22, 34]);
正如您所看到的,因为ajaxGet
是异步的,所以这不起作用。我怎么能这样做呢?
答案 0 :(得分:4)
您也可以告诉Ajax同步运行
$.ajax({async: false});
var results = getResults();
$.ajax({async: true});
答案 1 :(得分:3)
您需要使用回调返回数组,并在收到最后一个响应时调用回调。 (请注意,不会按顺序收到回复)
function getResults(nums, callback) {
var results = [];
for(var i = 0, len = nums.length; i < len; i++){
var num = nums[i];
ajaxGet("http://xxx.com/" + num, function(data){
results.push(data);
if (results.length === nums.length)
callback(results);
});
}
}
答案 2 :(得分:0)
如果您正在使用jQuery,可以将async标志设置为false:
function getResults(nums){
var results = [];
for(var i = 0, len = nums.length; i < len; i++){
var num = nums[i];
jQuery.ajax({
url: "http://xxx.com/" + num},
async: flase,
success: function(data){
results.push(data);
}
});
}
return results;
}
var results = getResults([12, 22, 34]);
但如果你这样做,那么你的方法就错了。改为使用SLaks answer。
答案 3 :(得分:0)
var allresults;
function getResults(nums){
var results = [];
for(var i = 0, len = nums.length; i < len; i++){
var num = nums[i];
ajaxGet("http://xxx.com/" + num, function(data){
results.push(data);
if(results.length == nums.length){
resume(results);
}
});
}
}
getResults([12, 22, 34]);
function resume(results){
allresults = results;
....
....
}
像其他人说的那样,如果你没有使用jQuery,请使用