[英]Can I declare a non-global variable to store asynchronous values?
我有多个JavaScript文件。 我有一个JS函数,在包含多个AJAX调用的负载下运行。 每个AJAX调用都会执行一个回调(并增加一个同步计数器):: myArray.push('somevalue');
这样我就可以验证所有(针对此JS文件的)AJAX调用何时完成。
有没有一种方法可以避免将myArray声明为全局变量,而又允许异步回调推入此数组呢?
如果要在一定数量的AJAX请求完成后执行一些代码,请使用$.when
。
如果仅使用myArray
来知道请求何时完成,则可以将其删除。 如果使用它来存储每个请求的结果,则可以将其保留在与请求相同的范围内,然后在done
处理程序中对其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]);
}
});
声明一个只能在所需范围内访问的变量(例如,在函数内部)。
就像是:
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回调中访问。 希望有帮助!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.