IE9在jQuery.ajax“完成”方法上抛出错误

我已经在最新的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()); }); 

使这有点exception的是我手动加载最新版本的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); } 

我这样做的原因是因为我正在写一个非常古老的Web应用程序,我无法覆盖窗口。$所以我发送我的应用程序最新的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); 

IE9似乎有readyState ,如"uninitialized""loading""complete" 。 这些之间的转换似乎触发了IE中的onreadystatechangeonload最终也被打了 ,所以你几次初始化所有东西。 我不确定这是如何导致$.ajax的奇怪返回值,但显然删除它修复它。