【问题标题】:jQuery getScript() not resolvingjQuery getScript() 无法解析
【发布时间】:2013-07-28 10:00:11
【问题描述】:

我正在使用 jQuery 的 getScript() 加载单独的 javascript 文件。文件似乎可以正常加载(我知道这是因为当我输入了错误的 URL 时,它会引发错误 - 正确的 URL 没有错误)。

但是,done()函数似乎不起作用。控制台不会记录“完成”,也不会调用任何函数。

(function($) {
    $.when(
        $.getScript( templateUrl + "/assets/js/variables.js" ),
        $.getScript( templateUrl + "/assets/js/functions.js" ),
        $.getScript( templateUrl + "/assets/js/events.js" ),
        $.Deferred(function( deferred ){
            $( deferred.resolve );
        })
    ).done(function(){

        console.log("done");

        swapBackgroundImgs();
        singleLarge();
        bindFlexorder();
        bindSvgeezy();
        bindPlaceholder();
        preloadImages();

    });
})( jQuery );

【问题讨论】:

    标签: jquery jquery-deferred getscript


    【解决方案1】:

    done 回调永远不会被触发,因为您已经明确地创建了一个 Deferred 并且从未解决它。 $.when 等待 所有 的承诺得到解决。

    您在$.Deferred 中的代码:

    $( deferred.resolve );
    

    ...将Deferredresolve 函数安排为ready 回调,但该函数将被错误的this 调用(document 而不是Deferred 对象;更多:Mythical methods),这可能导致它抛出错误ready buries。

    完全删除$.Deferred,或者如果您的目标是等待ready,请确保在调用resolve时正确设置this

    $.Deferred(deferred) {
        $(function() {
            deferred.resolve();
        });
    })
    

    或:

    $.Deferred(deferred) {
        $($.proxy(deferred.resolve, deferred));
    })
    

    或者,但请注意注释:

    $.Deferred(deferred) {
        // Deprecated in jQuery 1.8
        $(document).on("ready", deferred, "resolve");
    })
    

    【讨论】:

    • 你说的很有道理。我从this stack 发现了多个 getScript(),这就是为什么我的代码是这样的。我已经删除了$.Deferred,但done() 中仍然没有任何内容被调用。它与jQuery函数包装器有什么关系吗?
    • @tommyf:这不是因为您显示的代码中的包装器,但如果您还在加载的脚本中使用该包装器,那么是的:那些中的函数脚本将无法访问,因为它们会被很好地包裹在一个作用域函数中。您必须以某种方式使它们可用,可能是通过一个可用作全局变量的共享对象(var App = {};,然后它们将自己添加到App),或者让它们在现有全局上引发事件(@987654346 @) 将对它们的引用传递给侦听器。
    • 加载的脚本全部解包。通过网络检查器,我可以看到加载的脚本都可以在XHRs 目录中查看。从那里可以访问它们吗?
    • 好吧,我的一个包含的脚本似乎有问题,因为当我评论除了一个之外的所有完成回调工作正常。感谢您的帮助。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-05-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-25
    • 1970-01-01
    相关资源
    最近更新 更多