обратный вызов javascript, когда некоторые скрипты на странице выполнены

Я пытаюсь добавить модальную загрузку на HTML-страницу, пока выполняется какой-то javascript. Моя проблема в том, что я не могу заметить, когда эти сценарии закончили выполнение.

Я пробовал с:

$.when(
    $.getScript( "/script1.js" ),
    $.getScript( "/script2.js" ),
    $.getScript( "/script3.js" ),
    $.Deferred(function( deferred ){
        $( deferred.resolve );
    })
).done(function(){
    console.log('everything have been executed!');
});

Но, как сказано в документации getScript JQuery:

Обратный вызов запускается после того, как скрипт загружен, но не обязательно выполнен.

Есть ли способ установить обратный вызов для такого события?


person Marco    schedule 02.05.2016    source источник


Ответы (1)


Вы можете попробовать использовать $.ajax для загрузки скриптов.

$.ajax({
    async:false,
    url:'/script.js',
    type:'GET',
    data:null,
    dataType:'script',
    success:function(){
        console.log('Executed')
    }
});

async должен иметь значение false, чтобы он сначала загружал и выполнял скрипт, прежде чем запускать функцию успеха.

person Community    schedule 02.05.2016
comment
$.getScript на самом деле использует метод $.ajax. Это просто сокращение. Проблема ОП явно не в загрузке скрипта. Скорее нужно знать, была ли выполнена функция в скрипте с ленивой загрузкой. - person DavidDomain; 02.05.2016
comment
@DavidDomain async является ложным моим ответом, что означает, что он сначала загружает и выполняет скрипт, а затем выполняет функцию успеха, в то время как с $.getScript async имеет значение true. Я отредактировал исходный ответ, чтобы сделать его более понятным. - person ; 02.05.2016
comment
Async false устарел. Синхронные и асинхронные запросы - person DavidDomain; 02.05.2016
comment
Я не думаю, что вам нужно async:false для выполнения сценария первым, достаточно dataType: 'script'... См. документация для типа данных script. - person Heretic Monkey; 02.05.2016