정답은
getScript()
다음과 같은 약속을 사용 하고 모든 스크립트가로드 될 때까지 기다릴 수 있습니다 .
$.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
});
깡깡이
ANOTHER 뿐인
위의 코드에서 Deferred를 추가하고 내부에서 해결하는 것은 $()
jQuery 호출 내에 다른 함수를 배치 $(func)
하는 것과 같습니다.
$(function() { func(); });
즉, DOM이 준비 될 때까지 대기하므로 위의 예 $.when
에서는 모든 스크립트가로드 되고$.Deferred
DOM 준비 콜백에서 해결 되는 호출로 인해 DOM이 준비 될 때까지 대기 합니다.
보다 일반적인 사용을 위해 편리한 기능
모든 스크립트 배열을 허용하는 유틸리티 함수는 다음과 같이 만들 수 있습니다.
$.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);
}
이것처럼 사용할 수 있습니다
var script_arr = [
'myscript1.js',
'myscript2.js',
'myscript3.js'
];
$.getMultiScripts(script_arr, '/mypath/').done(function() {
// all scripts loaded
});
여기서 경로는 모든 스크립트 앞에 추가되며 선택 사항이기도합니다. 즉, 배열에 전체 URL이 포함 된 경우이 작업을 수행 할 수 있으며 경로를 모두 생략 할 수 있습니다.
$.getMultiScripts(script_arr).done(function() { ...
인수, 오류 등
또한 done
콜백에는 전달 된 스크립트와 일치하는 여러 인수가 포함되며 각 인수는 응답을 포함하는 배열을 나타냅니다.
$.getMultiScripts(script_arr).done(function(response1, response2, response3) { ...
각 배열은 다음과 같은 것을 포함합니다. [content_of_file_loaded, status, xhr_object]
. 우리는 일반적으로 스크립트가 자동으로로드되기 때문에 일반적으로 이러한 인수에 액세스 할 필요가 없으며 대부분의 경우 done
콜백은 모든 스크립트가로드되었다는 것을 실제로 알게 된 것입니다. 완전성을 위해 추가하고 있습니다. 드문 경우지만로드 된 파일의 실제 텍스트에 액세스해야하거나 각 XHR 개체 또는 이와 유사한 항목에 액세스해야하는 경우가 있습니다.
또한 스크립트가로드되지 않으면 실패 핸들러가 호출되고 후속 스크립트가로드되지 않습니다.
$.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 );})
여기에 왜 추가하는지 설명해 주시겠습니까 ?