我已经在最新的Chrome和Firefox中使用了代码 IE9然而讨厌我(我感觉一样)。
我得到的具体错误是:
Object doesn't support property or method 'done'
有问题的代码:
app.$.ajax({
url: app.baseUrl + "Geos",
contentType: "application/json",
dataType: "json"
}).done(function (data) {
app.controls.ddlGeos.html('');
for (var i = 0; i < data.d.length; i++) {
var geo = data.d[i];
var option = $(document.createElement("option"));
option.attr('value', geo.code);
option.html(geo.name);
app.controls.ddlGeos.append(option);
};
}).fail(function (xhr, status) {
console.log("Error retrieving Geo list", xhr, status);
}).always(function (data, status, xhr) {
app.controls.ddlGeos.parent().find('#geo_ajax_image').remove();
app.setSelectedValues(app.controls.ddlGeos, app.controls.hdnGeo.val());
});
使我有点异常的是我手动加载最新版本的jQuery 1.8.2),如下所示:
// The following code allows us to run jQuery 1.8.2 independantly of the main jQuery
if (!jq) {
var script = document.createElement("script");
script.src = 'https://ajax.googleapis.com/ajax/libs/jquery/1.8.2/jquery.min.js';
script.onload = script.onreadystatechange = function () {
window.jq18 = jQuery.noConflict(true);
app.init(window.jq18);
};
document.body.appendChild(script);
} else {
app.init(jq);
}
我这样做的原因是因为我正在写一个非常古老的网络应用程序,我无法覆盖窗口。$所以我发送我的应用程序最新的jQuery版本。
但是,我已经完成了一些控制台日志记录,并且在ajax调用被命中时正在加载正确版本的jQuery IS。 app.$().jquery
输出"1.8.2"
修改
好的,我想我知道问题的一部分。我在2个不同的ASP.Net UserControls中做类似的代码(想想封装的网页)。他们同样以这种方式加载jQuery 1.8.2因为两者都不能确定其他存在。似乎Firefox和Chrome处理这个问题,但是IE在某种程度上导致我的“onreadystatechange”事件被触发两次(并且不知道其中一个事件是在没有正确版本的jquery的情况下发生的。)
有什么我可以做的修改jquery加载代码,以确保它只发生一次?我这样称呼它:
(function (jq) {
// All my "app" code here
app = {
init : function($) {
app.$ = $ || window.$;
// Other code
}
};
if (!jq) {
var script = document.createElement("script");
script.src = 'https://ajax.googleapis.com/ajax/libs/jquery/1.8.2/jquery.min.js';
script.onload = script.onreadystatechange = function () {
window.jq18 = jQuery.noConflict(true);
app.init(window.jq18);
};
document.body.appendChild(script);
} else {
app.init(jq);
}
})(window.jq18);
答案 0 :(得分:1)
IE9似乎有readyState
,例如"uninitialized"
,"loading"
和"complete"
。这些之间的转换似乎在IE中触发onreadystatechange
。 onload
最终也 fied,所以你要多次初始化所有内容。我不确定这是如何导致$.ajax
的奇怪返回值,但显然删除它会修复它。