我的代码:
var test = getData(email, password, data.sites);
console.log(test); // 4 sites, 4 responses
// TODO if 4 responses, call other function
function getData(email, password, sites) {
var formData = createFormDataArray(email, password, 0); // not so relevant
var returnValues = [];
sites.forEach(function (site) {
var url = 'http://' + site + '/test.php';
var newValue;
sendRequest(url, formData).done(function(value) {
newValue = value.status; // string
console.log(newValue);
});
returnValues.push(newValue); // add to array
});
console.log('------');
console.log(returnValues); // print array
return returnValues;
}
function sendRequest(url, formData) {
return $.ajax({
type: 'post',
url: url,
data: formData,
crossDomain: true,
dataType: 'json',
encode: true
});
}
我想在这里做的是对不同的域进行多次Ajax调用,将结果放在一个数组中。
如果数组包含所有回复,我想调用另一个功能,我现在还没有。
这里的问题是:电话是异步的,我喜欢等待'直到我收到所有回复,以便我可以启动另一个功能。
目前已记录:
我需要什么:
newValue:" Ok"
[" Ok"," Ok"," Ok"," Ok"]
或类似的东西。 怎么办呢?
**编辑:我的解决方案:**
var defers = [];
sites.forEach(function (site) {
var url = 'http://' + site + '/test.php';
var defer = sendRequest(url, formData);
defers.push(defer);
});
$.when.apply(window, defers).always(function() {
// the other function
});
创建一系列推迟'。然后,使用以下答案中的解决方案。
答案 0 :(得分:1)
你可以使用jQuery.when()进行多次ajax调用,并在完成所有xhr调用后执行一些函数。
$.when( $.ajax( "/page1.php" ), $.ajax( "/page2.php" ) ).done(function( a1, a2 ) {
// a1 and a2 are arguments resolved for the page1 and page2 ajax requests, respectively.
// Each argument is an array with the following structure: [ data, statusText, jqXHR ]
var data = a1[ 0 ] + a2[ 0 ]; // a1[ 0 ] = "Whip", a2[ 0 ] = " It"
if ( /Whip It/.test( data ) ) {
alert( "We got what we came for!" );
}
});
可以找到更多详细信息here
使用$ .when()和for循环,
var returnValues = [];
var deferreds = [];
sites.forEach(function (site) {
var url = 'http://' + site + '/test.php';
deferreds.push(sendRequest(url, formData));
});
$.when.apply($, deferreds).done(function(){
for(var i=0; i<arguments.length; i++)
{
returnValues.push(arguments[i].status);
}
});