我一直在研究jQuery中新的(ish)延迟对象,却偶然发现了该网站文章here

本文中有一些旨在缓存脚本的代码,因此不会多次请求脚本。

    var cachedScriptPromises = {};

    $.cachedGetScript = function( url, callback ) {
        if ( !cachedScriptPromises[ url ] ) {
            cachedScriptPromises[ url ] = $.Deferred(function( defer ) {
                $.getScript( url ).then( defer.resolve, defer.reject );
            }).promise();
        }
        return cachedScriptPromises[ url ].done( callback );
    };

// You would then call it like thus.
$.cachedGetScript( url ).then( successCallback, errorCallback );

在我看来,这是一种确保$.getScript()成功后才能执行脚本的方法。

就我的实验而言,即使我提供了错误的URL,也从未调用过错误回调。

我是否遗漏了一些明显的内容,或者代码示例有误?

注意:我曾在网站上问过这个问题,但评论系统无法正常工作。 :-S

最佳答案

我相当确定该脚本无法处理跨域请求。
$.getScript以不同的方式处理本地和跨域请求。对于本地请求,它将通过AJAX加载内容,然后运行它。由于这是正常的AJAX操作,因此会以正常方式发生错误。就我所能测试的而言,该代码可以正常工作。

但是,对于跨域请求,它可以通过在文档中插入script标记来工作。永远不会为插入的error元素触发script处理程序,因此您的error回调将永远不会触发。

关于jQuery延迟并 promise 使用getScript,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6137249/

10-11 05:33