在IE6中使用jQuery解析XML的问题

时间:2009-12-22 16:06:20

标签: xml jquery cross-browser

我正在尝试使用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中的第一个警告。

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

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

5 个答案:

答案 0 :(得分:4)

一些事情:

  • 为AJAX请求指定响应类型为xml
  • $(doc)中包装返回的XML对象并使用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>

答案 1 :(得分: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")

答案 2 :(得分:1)

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

答案 3 :(得分:0)

我正在使用这样的东西:

    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]);
    }

基本上,请尝试使用Microsoft的XML .XMLDOM方式。你能提供样品xml吗?

答案 4 :(得分:0)

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