在IE8中使用$ .ajax下载javascript文件时出现错误80020101

时间:2014-10-01 16:20:59

标签: javascript jquery ajax knockout.js internet-explorer-8

我有一个Knockout自定义绑定,只在一个文件中(允许绑定到jQuery小部件):

(function ($, ko, undefined) {
    ko.bindingHandlers.switch = {
        init: function (element, valueAccessor, allBindings, viewModel, bindingContext) {
            $(element).switch(valueAccessor());
        }
    };
}(jQuery, ko));

项目使用jQuery._evalUrl功能在某个时候下载此文件。我可以描述整个过程,但我不确定它是否相关。

问题是在IE8中,我在函数$ .ajax期间得到了好的旧错误80020101。

我环顾四周,发现这个错误几乎可以在任何原因发生(请参阅these questions总结其中一些)。

我没有在文件中找到任何JS错误(但我不是JS大师),最终查看了jQuery._evalUrl函数。这是jQuery 1.11.1中的源代码:

jQuery._evalUrl = function( url ) {
    return jQuery.ajax({
        url: url,
        type: "GET",
        dataType: "script",
        async: false,
        global: false,
        "throws": true
    });
};

出于绝望,我改变了

dataType: "script",

dataType: "text/javascript",

并且......有效。

但事实上,写作

dataType: "dummy",

工作得很好。但删除整个dataType行并没有。

我不确定我明白为什么。代码是在dataType="script"时评估的,而不是其他的吗?

所以我尝试逐步重写自定义绑定,一直测试,使用原始dataType: "script"跟踪潜在的代码问题。

这不会引发错误:

(function ($, ko, undefined) {
}(jQuery, ko));

这样做:

(function ($, ko, undefined) {
    ko.bindingHandlers.switch = {
    };
}(jQuery, ko));

事实上,这两个也失败了:

(function ($, ko, undefined) {
    ko.bindingHandlers.switch = 1;

}(jQuery, ko));

(function ($, ko, undefined) {
    ko.bindingHandlers.switch = "a";
}(jQuery, ko));

任何想法到底发生了什么?

0 个答案:

没有答案