首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >IE9抛出错误对jQuery.ajax“完成”方法的影响

IE9抛出错误对jQuery.ajax“完成”方法的影响
EN

Stack Overflow用户
提问于 2012-11-12 17:45:10
回答 1查看 1.7K关注 0票数 4

我已经在最新的Chrome和Firefox中运行了代码。

然而,IE9恨我(我也有同样的感觉)。

我遇到的具体错误是:

Object doesn't support property or method 'done'

有关守则:

代码语言:javascript
复制
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的最新版本,如下所示:

代码语言:javascript
复制
// 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正在加载中。app.$().jquery输出"1.8.2"

编辑

好吧,我想我知道部分问题。我在两个不同的ASP.Net UserControls (想想封装的网页)中做类似的代码。它们都以这种方式加载jQuery 1.8.2,因为两者都无法确定另一个是否存在。看上去火狐和Chrome可以处理这个问题,但是IE在某种程度上导致我的"onreadystatechange“事件触发了两次(其中一次是在没有适当版本的jquery的情况下发生的)。

我能做些什么来修改jquery加载代码以确保它只发生一次吗?我是这样说的:

代码语言:javascript
复制
(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);
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-11-12 18:50:01

IE9似乎有readyState,如"uninitialized""loading""complete"。在IE中,它们之间的转换似乎激发了onreadystatechangeonload最终也被修改了,所以您需要多次初始化所有内容。我不知道这是如何导致$.ajax的奇怪的返回值的,但是很明显,删除它就修复了它。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13348713

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档