В документах getScript говорится об обратном вызове успеха, который:
"Обратный вызов запускается, как только script загружен, но не обязательно выполняется."
Но в моем тестировании это не похоже на правду. Для главной страницы с:
var startTime = new Date();
$.getScript("test.js")
.done(function( script, textStatus ) {
console.log( textStatus );
console.log( "Done callback executing now.")
})
.fail(function( jqxhr, settings, exception ) {
console.log("error." );
});
загрузите следующий "test.js" script, который связывает пользовательский интерфейс в течение 5 секунд:
console.log("ajaxed script starting to execute.");
var newTime = new Date();
while (newTime - startTime < 5000) {
newTime = new Date();
}
console.log("elapsed time", newTime - startTime);
console.log("ajaxed script finished executing.");
приводит к тому же прогнозируемому выпуску консоли как в FF, так и в Chrome:
ajaxed script starting to execute.
elapsed time 5000
ajaxed script finished executing.
success
Done callback executing now.
Другими словами, обратный вызов успеха никогда не срабатывает, пока загруженный и выполняемый загруженный script не загружается. Кажется, это связано с тем, что в источнике jQuery функция globalEval немедленно вызывает script:
converters: {
"text script": function( text ) {
jQuery.globalEval( text );
return text;
}
}
Значит, документы неправильные? Если они верны, то в каких конкретных случаях будет выполняться обратный вызов успеха до выполнения script?