Jawabannya adalah
Anda dapat menggunakan janji dengan getScript()
dan menunggu hingga semua skrip dimuat, seperti:
$.when(
$.getScript( "/mypath/myscript1.js" ),
$.getScript( "/mypath/myscript2.js" ),
$.getScript( "/mypath/myscript3.js" ),
$.Deferred(function( deferred ){
$( deferred.resolve );
})
).done(function(){
//place your code here, the scripts are all loaded
});
BIOLA
FIDDLE LAIN
Dalam kode di atas, menambahkan Tangguhan dan menyelesaikannya di dalam $()
adalah seperti menempatkan fungsi lain di dalam panggilan jQuery, seperti $(func)
, itu sama dengan
$(function() { func(); });
yaitu menunggu DOM siap, jadi dalam contoh di atas $.when
menunggu semua skrip untuk dimuat dan untuk DOM siap karena $.Deferred
panggilan yang diselesaikan dalam DOM ready callback.
Untuk penggunaan yang lebih umum, fungsi praktis
Fungsi utilitas yang menerima berbagai skrip dapat dibuat seperti ini:
$.getMultiScripts = function(arr, path) {
var _arr = $.map(arr, function(scr) {
return $.getScript( (path||"") + scr );
});
_arr.push($.Deferred(function( deferred ){
$( deferred.resolve );
}));
return $.when.apply($, _arr);
}
yang bisa digunakan seperti ini
var script_arr = [
'myscript1.js',
'myscript2.js',
'myscript3.js'
];
$.getMultiScripts(script_arr, '/mypath/').done(function() {
// all scripts loaded
});
di mana path akan ditambahkan ke semua skrip, dan juga opsional, yang berarti bahwa jika array berisi URL lengkap, salah satunya juga bisa melakukan ini, dan biarkan path bersama-sama
$.getMultiScripts(script_arr).done(function() { ...
Argumen, kesalahan, dll.
Sebagai tambahan, perhatikan bahwa done
panggilan balik akan berisi sejumlah argumen yang cocok dengan skrip yang diteruskan, setiap argumen mewakili array yang berisi respons
$.getMultiScripts(script_arr).done(function(response1, response2, response3) { ...
di mana setiap array akan berisi sesuatu seperti [content_of_file_loaded, status, xhr_object]
. Kita biasanya tidak perlu mengakses argumen itu karena skrip akan dimuat secara otomatis, dan sebagian besar waktu done
panggilan balik adalah kita benar-benar setelah mengetahui bahwa semua skrip telah dimuat, saya hanya menambahkannya untuk kelengkapan , dan untuk kejadian langka ketika teks aktual dari file yang dimuat perlu diakses, atau ketika seseorang membutuhkan akses ke setiap objek XHR atau sesuatu yang serupa.
Juga, jika ada skrip yang gagal dimuat, penangan yang gagal akan dipanggil, dan skrip berikutnya tidak akan dimuat
$.getMultiScripts(script_arr).done(function() {
// all done
}).fail(function(error) {
// one or more scripts failed to load
}).always(function() {
// always called, both on success and error
});
$.Deferred(function( deferred ){$( deferred.resolve );})
sini?