jquery defer 和 Promise 与 getScript

标签 jquery jquery-deferred

我一直在研究 jQuery 中新的延迟对象,我偶然发现了这篇网站文章 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() 成功时才会执行的方法。

就我的实验而言,即使我提供了不正确的网址,错误回调也永远不会被调用。

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

注意:我本来会在网站上问这个问题,但评论系统不起作用。 :-S

最佳答案

我相当确定该脚本无法处理跨域请求。

$.getScript 对于本地和跨域请求以不同的方式工作。对于本地请求,它通过 AJAX 加载内容然后运行它。由于这是正常的 AJAX 操作,因此会以正常方式发生错误。据我测试,该代码工作正常。

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

关于jquery defer 和 Promise 与 getScript,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6137249/

相关文章:

目录树形式的请求的 jQuery 延迟对象

Javascript/Jquery 幻灯片菜单在 Chrome 中不起作用

jquery - 无法让 jQueryUI 日期选择器显示我想要的日期范围

jquery - 清除/删除附加到 $.Deferred 对象的处理程序

jquery - 关于 jQuery.Deferred()

javascript - 收到 AJAX 内容时 $.each 的下一次迭代

jQuery 'deferred object/promises' 性能?

javascript - 将CSS应用于IE10及以下

javascript - 如果使用 AngularJS 需要相应的表单元素,则用星号标记标签

javascript - printArea.js 如何在 div 标签之间插入分页符