代码之家  ›  专栏  ›  技术社区  ›  Peter Bernier

在IE6中使用jquery分析XML时出现问题

  •  1
  • Peter Bernier  · 技术社区  · 15 年前

    我正在尝试以跨浏览器兼容的方式使用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
        });
      });
    });
    

    这将提取 <created> 我的XML文件中的节点。

    我引用了我页面中的jquery库,它在firefox中正确解析,所以我假设我的解析代码是适当的。我在火狐中都收到了警报,但在IE中只有第一个。

    我可以发誓我昨天也有类似的代码在运行,但我一定是做了一些修改,然后以某种方式破坏了它。在和它搏斗了将近一个小时之后,我正在寻找另一双眼睛。

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

    5 回复  |  直到 15 年前
        1
  •  4
  •   Lytol    15 年前

    几件事:

    • 将响应类型指定为 xml 对于您的Ajax请求
    • 将返回的XML对象包装在 $(doc) 使用 find 查询XML
    • 我想你的第一行有一些错别字: reader 应该是 ready 还有一个右括号

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

    索引文件 :

    <!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>
    

    测试.xml :

    <?xml version="1.0" encoding="UTF-8"?>
    <created>2010-01-07 00:00:00</created>
    
        2
  •  2
  •   Anwar Chandra    15 年前

    试裹 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")
    
        3
  •  1
  •   kgiannakakis    15 年前

    确保将“text/xml”用作XML文件的内容类型。

        4
  •  0
  •   Nakul    15 年前

    我用的是这样的东西:

        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
  •  0
  •   alcohol    15 年前

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