在加载了两到五个中等大小的数据文件之后,我经常需要在网页上加载一个函数。假设最多 3MB 的数据拆分为最多五个文件。
我尝试通过同时进行所有 AJAX 调用并在它们全部加载后加载 initialize() 函数来优化加载时间,如下所示:
var data1, data2;
$(document).ajaxStop(function() {
$(this).unbind("ajaxStop"); //prevent running again when other calls finish
initialize();
});
$.ajax({
url: url_to_data_1,
success: function (d) {
data1 = d;
}
});
$.ajax({
url: url_to_data_2,
success: function (d) {
data2 = d;
}
});
function initialize() { /* do something with data1 and data2 */ }
但是我厌倦了每次都粘贴这个,所以我想要一个这样的函数:
function multi_Ajax(urls, callback) {
var data = {};
//call init() after both the list of prayers and the word concordance index load
$(document).ajaxStop(function() {
$(this).unbind("ajaxStop"); //prevent running again when other calls finish
callback(data);
});
for (var c = 0; c < urls.length; c += 1) {
//data files
$.ajax({
url: urls[c],
dataType: "json",
success: function (d) {
data[urls[c]] = d; console.log("Loaded " + urls[c]);
}
});
}
}
当然,这不起作用,因为 ajax 调用不存在供 ajaxStop 捕获。但我不明白 ajaxStop 是如何工作得足够好来进一步发展的。谢谢!