【问题标题】:innerHTML after XMLHttpRequest not working on IE9XMLHttpRequest 之后的 innerHTML 在 IE9 上不起作用
【发布时间】:2015-06-22 13:18:04
【问题描述】:

我有以下黑色代码,在 Chrome 和 Firefox 上运行良好,但在 IE 上每次都失败,它在控制台选项卡中返回“未定义”。

<html>
<head>
    <script type="text/javascript" charset="utf-8" src="/js/jquery-latest.js"></script>

<script>
$(document).ready(function()
{

test(); 

});


function test()
{

          if (window.XMLHttpRequest)
          {// code for IE7+, Firefox, Chrome, Opera, Safari
          xmlhttp=new XMLHttpRequest();
          }
        else
          {// code for IE6, IE5
          xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
          }
        xmlhttp.open("GET","/xml/products.xml",false);
        xmlhttp.send();
        xmlDoc=xmlhttp.responseXML;
        var list = xmlDoc.getElementsByTagName("product");
        console.log(list[0].childNodes[1].innerHTML);

}
    </script>
</head>
</html>

我使用的 XML 如下:

感谢您的宝贵时间。

编辑:jQuery ajax 版本也不起作用:

var xmlDoc;     
$.ajax({
    type: "GET",
    url: "/xml/products.xml",
    dataType: "xml",
    success: function (xml) {
        xmlDoc = xml;
                var list=xmlDoc.getElementsByTagName("product");
                console.log(list[1].childNodes[1].innerHTML );
    }
});

【问题讨论】:

  • 你真的需要接触原生 XHR 吗?你为什么不用$.ajax(),你好像已经有了jQuery。它解决了 LOT 的跨浏览器怪癖,尤其是像这样的供应商低级 API!
  • 我的 ajax 也有同样的问题,我只是想试试别的方法
  • 在收到回复前需要检查状态变化,检查msdn.microsoft.com/en-us/library/dd576252(v=vs.85).aspx
  • 请放心,问题出在其他地方。恢复到 jQuery 并发布该代码,这里有人可以帮助您。为什么async=false 与 CORS 有关系?我错过了什么吗?这两个方面在我的书中完全不相关......
  • @PatrickEvans 好的,错过了!但是你为什么不使用异步呢。

标签: javascript xml xmlhttprequest innerhtml


【解决方案1】:

不知道为什么这在 Chrome 和 FF 中有效,它实际上不应该1

您正在加载一个 XML 文档,并且正在成功选择一个 XML 元素节点。那些没有innerHTML 属性2。如果您确实需要获取 xml 文档的标记,则应该使用 XMLSerializer(也许您只是在寻找 .textContent?)。

var el = list[0].childNodes[1];
console.log(new XMLSerializer().serializeToString(el));

但是,oldIE 甚至不知道,您需要为它们使用el.xml3

1:至少在旧版本中不会。另请参阅does innerHTML work with XML Elements?
2:显然,DOM 解析规范现在在所有 DOM 元素上都包含一个通用的innerHTML attribute
3:见JavaScript: Replacement for XMLSerializer.serializeToString()?

【讨论】:

  • 感谢您的回答,在 IE 中我现在 XMLSerializer 未定义...:/
  • 嗯,MSDN 声称 IE9 有一个……
猜你喜欢
  • 2018-04-29
  • 2013-12-28
  • 1970-01-01
  • 2021-06-04
  • 2011-01-25
  • 1970-01-01
  • 1970-01-01
  • 2020-12-23
  • 2019-09-23
相关资源
最近更新 更多