我写了一些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) –