我有一个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));
任何想法到底发生了什么?