我寫了一些JavaScript來運行一組「模塊」。對於每個模塊,它會調用ajax,獲取模塊的html,並將模塊轉儲到頁面佈局上的兩列之一。如何在ajax回調中保留一個變量?
var modules = [
{ name: 'ExchangeStatus', title: 'Exchange Status', column: 'left' },
{ name: 'Grid', title: 'Contacts', column: 'right' }
{ name: 'Filters', title: 'Filters', column: 'left' }
],
modulesUrl = '/Modules/';
for (var count = 0; count < modules.length; count++) {
var module = modules[count];
// Get module HTML.
$.ajax({
url: modulesUrl + module.name,
success: function (moduleHtml) {
// Append module HTML to appropriate element.
$('#' + module.column + 'Column').append(moduleHtml);
// Custom event to trigger the module to load its data.
var initializeModuleEvent = $.Event('initialize' + module.name);
initializeModuleEvent.firstLoad = true;
$(document).trigger(initializeModuleEvent);
}
});
}
問題在於for循環創建競爭條件。在ajax回調中,module.column
幾乎總是最後一個模塊的值,因爲for循環在ajax回調返回之前很久才完成。我如何維護模塊變量,以便每個回調都處理相應的模塊?目前,所有三個模塊都在左列中結束,因爲循環中的最後一個模塊位於左列。
可能重複[關閉的Javascript內循環 - 簡單實用的例子(HTTP://計算器。 com/questions/750486/javascript-closure-inside-loops-simple-practical-example) –