[英]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.