我有多个JavaScript文件。
我有一个JS函数,它在包含多个AJAX调用的加载时运行。
每个AJAX调用都执行回调(以及递增同步计数器)::
myArray.push('somevalue');
这样我就可以验证所有AJAX调用(对于这个JS文件)何时完成。
有没有一种方法可以避免将myArray声明为全局变量,同时允许异步回调推入此数组?
答案 0 :(得分:0)
如果要在完成一定数量的AJAX请求后执行某些代码,请使用$.when
。
如果您仅使用myArray
知道请求何时完成,则可以将其删除。如果您使用它来存储每个请求的结果,则可以将其保留在与请求相同的范围内,然后在done
处理程序中访问它。试试这个:
var myArray = [];
var ajax1 = $.ajax({
url: '/foo/',
success: function(data) {
myArray.push(data);
});
});
var ajax2 = $.ajax({
url: '/bar/',
success: function(data) {
myArray.push(data);
});
});
$.when(ajax1, ajax2).done(function() {
// both requests complete
// myArray will contain the data of both requests at this point...
for (var i = 0; i < myArray.length; i++) {
console.log(myArray[i]);
}
});
答案 1 :(得分:0)
声明一个只能在你想要的范围内访问的变量(例如,在函数内部)。
类似的东西:
var ajaxCalls = function() {
var myArray = [];
var ajax1 = $.ajax({
url: 'foo.com',
success: function(data) {
myArray.push(data);
});
});
// do more AJAX stuff
$.when(ajax1, ..., ).done(function() {
// make sure all requests are complete
// do stuff with the completed array
});
};
由于JavaScript具有功能范围,因此myArray变量不是全局变量,但可以在ajax回调中访问。希望有所帮助!