【问题标题】:AJAX and IE - Unable to get property errorAJAX 和 IE - 无法获取属性错误
【发布时间】:2018-05-25 16:03:57
【问题描述】:

在 IE 上使用 AJAX(在 IE11 中测试)时,我在行 var ajax_html = $(xml).find("#search-ajax-content").html(); 上收到以下错误 Unable to get property ‘replace’ of undefined or null reference。此代码在其他浏览器(Chrome、FF 和 Safari)上运行良好。

有没有人在使用 AJAX 之前遇到过这个问题?我不确定如何解决这个问题。任何帮助表示赞赏!谢谢!!

    $.ajax({
            type:"GET",
            dataType:"xml",
            url:"/search-ajax/" + window.location.search + "&pagination=" + page,
            success: function(data) {
                var xml = data;

                if (page == 1)
                {
                    $("#wait-element-container").remove();


                    // Issue is happening here only on IE!
                    var ajax_html = $(xml).find("#search-ajax-content").html();
                    $("#postload-target").append(ajax_html);
                }

            }
        });

【问题讨论】:

  • 嗯,我刚刚通读了一遍。我不是我应该如何等待这个元素加载?有什么想法吗?
  • 我不太确定是否诚实。我会尝试使用他在 cmets if (typeof myVar !== 'undefined') { ... } 中提到的类型检查。我会给你一个打击,希望其他人会加入。
  • 谢谢。我很感激!希望其他人加入...我有点卡住了!
  • IE为什么要设置dataType为text?

标签: javascript jquery ajax


【解决方案1】:

jQuery 能够将文本和查询解析为 HTML(只要文本是有效的 html)。你试过了吗:

$.ajax({
            type:"GET",
            dataType:"text",
            url:"/search-ajax/" + window.location.search + "&pagination=" + page,
            success: function(data) {
                var xml = data;

                if (page == 1)
                {
                    $("#wait-element-container").remove();


                    // Issue is happening here only on IE!
                    var ajax_html = $(xml).find("#search-ajax-content").html();
                    $("#postload-target").append(ajax_html);
                }

            }
        });

【讨论】:

  • 哇!这有效!任何想法为什么从 xml 更改为 text 会解决这个问题?!
  • @Michael 没有意义......你有: dataType:$.browser.msie ? "text" : "xml",这与 dataType: "text" 相同,它不应该工作......除非你的浏览器不是 IE 或者它无法以某种方式检测到它......无论如何,很高兴它适用于你现在。
  • 是的,我也是这么想的。我很惊讶它现在正在工作。我会做更多的测试,以确保它 100% 正常工作....随时发布
【解决方案2】:

我记得在使用 ASP.NET 处理 AJAX 时遇到过这个问题(但是)。我不知道这是否有帮助,但无论如何我都会发布它。注意 XML 的 response 解析中的“d”。这位于一个 Javascript 文件中:

function ajaxCall() {
    $.ajax({
        /* Code ommited for brevity */
        ...
        success: 'myFunction_OnSuccess',
        ...
    });
}

function myFunction_OnSuccess(response) {
    /* On NetFramework 2.0 and older'*/
    /*var xmlDoc = $.parseXML(response);*/

    /*For NetFramework 3.5+'*/
    var xmlDoc = $.parseXML(response.d);
    var xml = $(xmlDoc);

    var msg = xml.find("msg").text();
}

这就是我处理 Ajax 的 onSuccess 响应的方式。

【讨论】:

  • 感谢圣地亚哥的帖子!快速提问......当输出 console.log(xmlDoc) 我得到空值。我想知道我的 xml 结构是否有问题?下面是 console.log(xml) prntscr.com/jo67uu 时输出的内容
  • 我可能是 response 没有以正确的格式返回,在这种情况下是 XML。我使用的是 VB/C#,所以我以这种方式返回它,不过我使用纯文本,请注意“返回 ds.GetXml()”:[WebMethod] public static string WebMethodExample() { DataSet ds = new DataSet(); DataTable dt; dt.Columns.Add("msg"); dt.Rows.Add(); dt.Rows(0)("msg") = "This is my AJAX response message"; return ds.GetXml(); } 您必须将其复制粘贴到您的编辑器才能更好地查看。
  • 嗯...我实际上不认为是这样。 IE 上的 XML 加载会不会有超时?
【解决方案3】:

看起来你只对 IE 有问题,因为你设置的数据类型:

dataType:$.browser.msie ? "text" : "xml",

改成

dataType: "xml",

应该没问题。

【讨论】:

  • 嗯,这并没有解决它。会不会是xml加载超时?
  • 或者我可以通过其他方式访问该元素的 .html() 吗?
猜你喜欢
  • 2013-11-23
  • 2012-07-28
  • 2014-12-14
  • 2022-09-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-05-08
  • 2016-11-30
相关资源
最近更新 更多