tải nhiều kịch bản bởi $ .getScript() một sau khi khác và làm công cụ sau khi tất cả các kịch bản được nạp
Working Fiddle. Kiểm tra cửa sổ Console cho đầu ra
Chúng ta có thể tạo một hàm mà chúng ta vượt qua mảng đường dẫn tệp js, hàm này sẽ thực hiện $.getScript()
cho tệp js đầu tiên và phương pháp thành công. chỉ số tệp js thứ hai và thành công này sẽ gọi cùng chức năng bằng cách chuyển chỉ mục tệp thứ ba và tiếp tục cho đến khi nó tải tệp cuối cùng. Vì vậy, về cơ bản một hàm đệ quy của nó mà sẽ cung cấp một callback khi tất cả các file trong mảng đã được loaded.The mã kết thúc sẽ là đơn giản như
LoadAllScripts("yourArray",function(){
alert("all scripts loaded!!");
});
Vì vậy, các mã hoàn chỉnh sẽ đi như thế này.
var LoadAllScripts = function (scriptArray, callback) {
SyncLoadScript({ scriptArray: scriptArray, index: 0}, function() {
callback();
});
};
Và SyncLoadScript (core of the logic
) trông giống như
var SyncLoadScript = function (scriptConfig, callback) {
var $this = this;
var script = scriptConfig.scriptArray[scriptConfig.index];
if (scriptConfig.scriptArray.length > scriptConfig.index) {
if (script.trim().length > 0) {
$.getScript(script, function() {
console.log(script);
SyncLoadScript({ scriptArray: scriptConfig.scriptArray, index: ++scriptConfig.index, element: scriptConfig.element }, callback);
}).fail(function (jqXHR, textStatus, errorThrown) {
console.log(script + " failed while loading");
debugger;
console.log("Error: "+errorThrown);
SyncLoadScript({ scriptArray: scriptConfig.scriptArray, index: ++scriptConfig.index, element: scriptConfig.element }, callback);
});
}
else {
console.log("invalid script src!!");
}
}
else {
callback();
}
}
Sau đó, bạn có thể thực hiện cuộc gọi đơn giản để LoadAllScripts bằng cách thông qua hàng loạt các đường dẫn file js. như dưới đây.
LoadAllScripts(["1.js","2.js","3.js","4.js"], function() {
console.log("All the scripts have been loaded.");
//do your stuff after all the scripts are loaded.
});
Lưu ý: tôi đã đưa callbacks trống cho bạn để đảm chỉnh và vượt qua xung quanh bất kỳ dữ liệu được lựa chọn. probably to hold all the failed scripts that you can passback to the main function and try to reload them again
.
Tôi rất thích câu trả lời ở đây. Có vẻ như có một vài lựa chọn tốt: phương thức .getScript() của jQuery hoặc bất kỳ thư viện nào được đề cập (LABjs, HEADjs, v.v.) - Cảm ơn mọi người !! – Chris