【问题标题】:jQuery - fire AJAX callback after script has been loaded AND executed?jQuery - 加载并执行脚本后触发 AJAX 回调?
【发布时间】:2015-12-24 08:32:38
【问题描述】:

我遇到了一个问题,我需要 AJAX 加载一些脚本,并且只有在脚本都被加载和解析/执行后,回调函数才应该触发。

似乎 ajax 请求会在脚本下载后立即触发回调,但不一定在脚本执行时触发。除了使用超时等来解决问题之外,还有其他方法吗?

        $.ajax({
            dataType: 'script',
            cache: false,
            async: false,
            url: 'http://example.com/script1.js'
        }).success(function () {
            // I need this callback to fire only once the script has been executed
        });

【问题讨论】:

  • 你可以在script1.js之外声明一个全局变量myGlobalVar = 0,然后你的script1.js将它的值修改为1。然后在你的.success回调中你可以放一个while ( myGlobalVar == 0 ) .. ..直到它是1

标签: javascript jquery ajax


【解决方案1】:

你应该看看 jquerywhen

将允许您在执行完多个异步(ajax)方法后执行代码。

来自 jquery 文档:

描述:提供一种基于回调函数执行的方法 或更多对象,通常是表示异步的延迟对象 事件。

https://api.jquery.com/jquery.when/

至于运行代码前要执行的脚本,jquery对此有解决方案;获取脚本

$.getScript("jquery.cookie.js")
    .done(function() {
        jQuery.cookie("cookie_name", "value", { expires: 7 });
});

通过结合 getScriptwhen

在运行代码之前加载多个脚本并执行它们
$.when(
    $.getScript( "/script1.js" ),
    $.getScript( "/script2.js" ),
    $.Deferred(function( deferred ){
        $( deferred.resolve );
    })
).done(function(){

    // your code

});

另一种方法:

var scripts = ['script1.js','script2.js','script3.js'];
$.getScript(scripts, function(data, textStatus) {
    //do something after all scripts have loaded
});

参考:http://www.sitepoint.com/getscript-mutiple-scripts/

【讨论】:

    猜你喜欢
    • 2013-01-11
    • 2014-09-25
    • 1970-01-01
    • 1970-01-01
    • 2018-01-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-12
    相关资源
    最近更新 更多