【问题标题】:Issues parsing XML with jQuery in IE6在 IE6 中使用 jQuery 解析 XML 的问题
【发布时间】:2009-12-22 16:06:20
【问题描述】:

我正在尝试以跨浏览器兼容的方式使用 jQuery 从 xml 中提取值。我在 Firefox 中执行此操作没有任何问题,但不幸的是,这也必须与 IE 兼容。

我的 jQuery 代码如下所示:

$(document).ready(function()) {
  $.get("file.xml", {}, function(parseRefreshTime){
    alert('This line is executed in IE.');  
    $("created", parseRefreshTime).each(function() {
      alert('This line is *not* executed in IE.');  
      refreshTime = $(this).text();
      //do stuff with refreshtime
    });
  });
});

这会在我的 xml 文件中提取 <created> 节点的节点值。

我在我的页面中引用了 jQuery 库,它在 Firefox 中可以正确解析,所以我假设我的解析代码是合适的。我在 Firefox 中收到了两个警报,但在 IE 中只有第一个。

我可以发誓我昨天有非常相似的代码工作,但我一定是调整了一些东西并以某种方式破坏了它。和它战斗了将近一个小时,我正在寻找另一双眼睛。

谁能发现我在这里做错了什么?

【问题讨论】:

  • 能把xml文件的内容贴出来吗?
  • 你的意思是$(document).ready(function() {作为你的第一行吗?
  • 请记住保持您的 XML 相当简单,因为 IE6 的 Javascript 引擎痛苦地缓慢...

标签: xml jquery cross-browser


【解决方案1】:

一些事情:

  • 为您的 AJAX 请求指定响应类型为 xml
  • 将返回的 XML 对象包装在 $(doc) 中,并使用 find 查询 XML
  • 我认为您的第一行中有一些拼写错误:reader 应该是 ready,并且您有一个额外的右括号

这在 IE6 上对我有用。如果这对您不起作用,您可能需要检查您是否正确地提供了您的 xml。

index.html

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  <title>Test</title>

  <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js"></script> 
  <script type="text/javascript" charset="utf-8">
    $(document).ready(function() {
      $.get("test.xml", null, function(doc) {
        $(doc).find('created').each(function() {
          alert($(this).text());
        })
      }, 'xml');
    });
  </script>
</head>
<body>

</body>
</html>

test.xml

<?xml version="1.0" encoding="UTF-8"?>
<created>2010-01-07 00:00:00</created>

【讨论】:

    【解决方案2】:

    尝试用$() 包裹parseRefreshTime

        $("created", $(parseRefreshTime)).each(function() {
          alert('This line is *not* executed in IE.');  
          refreshTime = $(this).text();
          //do stuff with refreshtime
        });
    

    或尝试使用$(parseRefreshTime).find('created')

        $(parseRefreshTime).find("created").each(function() {
          alert('This line is *not* executed in IE.');  
          refreshTime = $(this).text();
          //do stuff with refreshtime
        });
    

    更新: 另外,尝试将type 指定为xml

    $.get("file.xml", {}, <callback>, "xml")
    

    【讨论】:

    • 对 IE6 中的任何一种解决方案都不满意。 :(
    • 您是否尝试指定类型:“xml”?
    • 还是没有运气。您的建议在 FF 中运行良好,但我仍然无法在 IE 中获得成功解析的值。
    【解决方案3】:

    确保使用 'text/xml' 作为 xml 文件的内容类型。

    【讨论】:

      【解决方案4】:

      我正在使用这样的东西:

          if ($.browser.msie){
              var tempXML = new ActiveXObject("Microsoft.XMLDOM");
              tempXML.async = false;
              tempXML.loadXML(data);
              xmlc = tempXML;
              items = $($(xmlc)[0]);
          } else if(window.DOMParser){
              items = $(new DOMParser().parseFromString(data, "text/xml").childNodes[0]);
          } else {
              xmlc = data;
              items = $($(xmlc)[1]);
          }
      

      基本上,尝试 IE 的 Microsoft.XMLDOM 方式。你能提供示例xml吗?

      【讨论】:

        【解决方案5】:

        XML 和 IE6 最大的缺陷之一是字符编码。确保您的浏览器可以正确解释该文件。与文档本身相比,很可能您的网络服务器使用不同的编码标头为页面提供服务。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2011-05-02
          • 2011-10-23
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-10-03
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多