【问题标题】:javascript callback when some scripts in the page have executed页面中的某些脚本已执行时的 javascript 回调
【发布时间】:2016-08-27 15:08:21
【问题描述】:

我正在尝试在执行某些 javascript 时向 HTML 页面添加加载模式。我的问题是我无法注意到这些脚本何时完成执行。

我试过了:

$.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 documentation 所说:

一旦脚本被加载但不一定被执行,回调就会被触发。

有没有办法为此类事件设置回调?

【问题讨论】:

    标签: javascript jquery jquery-callback


    【解决方案1】:

    您可以尝试使用 $.ajax 来加载脚本。

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

    async 需要为 false,以便在运行成功函数之前先加载并执行脚本。

    【讨论】:

    • $.getScript 实际上是使用$.ajax 方法。这只是一个简写。 OP的问题显然没有加载脚本。而是知道延迟加载脚本中的函数是否被执行。
    • @DavidDomain async 我的回答是假的,这意味着它首先加载并执行脚本,然后执行成功功能,而 $.getScript async 是真的。我编辑了原始答案以使其更清晰。
    • Async false 已弃用。 Synchronous and asynchronous requests
    • 我认为您不需要async:false 来让脚本首先执行,只需dataType: 'script'...有关数据类型script,请参见documentation
    猜你喜欢
    • 2019-03-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多