无法在Internet Explorer中使用javascript从XML文件中提取数据

时间:2012-06-29 07:42:45

标签: html xml

以下代码在firefox中运行良好,但与许多其他内容一样,我无法在Internet Explorer(任何版本)中使用它。

有人可以帮忙吗?

<body>
   <script type="text/javascript">
        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","messages.xml",false);
        xmlhttp.send();
        xmlDoc=xmlhttp.responseXML;

        var x=xmlDoc.getElementsByTagName("entry");
        for (i=0;i<x.length;i++)
            {
                document.write("<b>From:</b> ");
                document.write(x[i].getElementsByTagName("username")[0].childNodes[0].nodeValue);
                document.write("<br />");
                document.write("<b>Date:</b> ");
                document.write(x[i].getElementsByTagName("date")[0].childNodes[0].nodeValue);
                document.write("<br />");
                document.write("<b>Message:</b> ");
                document.write(x[i].getElementsByTagName("message")[0].childNodes[0].nodeValue);
                document.write("<br />");
                document.write("<br />");

            }
    </script>

</body>

1 个答案:

答案 0 :(得分:1)

有两个潜在问题浮现在脑海中:

  1. 也许您的AJAX通信失败了。在这种情况下,我强烈建议您使用像JQuery这样的库来处理您的沟通。然后您不必担心浏览器兼容性问题

  2. 其次,从服务器返回的数据不会与content-type("application/xml")一起发送。如果不同的浏览器无法可靠地检测到内容类型并且知道它是您期望的XML,那么它们的行为可能会有所不同。

  3. <强> [编辑]

    这是我在IE7中测试的完整工作示例

    <?xml version="1.0" encoding="utf-8"?>
    <!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" xml:lang="en" lang="en">
     <head>
       <title></title>
     </head>
     <body>
        <script type="text/javascript">
             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","messages.xml",false);
             xmlhttp.send();
             xmlDoc=xmlhttp.responseXML;
    
             var x=xmlDoc.getElementsByTagName("entry");
             for (i=0;i<x.length;i++)
                 {
                     document.write("<b>From:</b> ");
                     document.write(x[i].getElementsByTagName("username")[0].childNodes[0].nodeValue);
                     document.write("<br />");
                     document.write("<b>Date:</b> ");
                     document.write(x[i].getElementsByTagName("date")[0].childNodes[0].nodeValue);
                     document.write("<br />");
                     document.write("<b>Message:</b> ");
                     document.write(x[i].getElementsByTagName("message")[0].childNodes[0].nodeValue);
                     document.write("<br />");
                     document.write("<br />");
    
                 }
         </script>
    
         <div>Hi</div>
    
    </body>
    </html>
    

    来自messages.xml的测试数据也位于我服务器的根目录

    <?xml version="1.0"?>
    <root>
        <entry>
            <username>A</username>
            <date>B</date>
            <message>C</message>
        </entry>
    </root>
    

    这会产生以下输出

    From: A
    Date: B
    Message: C
    
    Hi
    

    IE很难调试,因为它的调试工具非常有限。我查看了FireFox的FireBug插件,看看我的WAMP服务器的内容类型是“application / xml”。

    content-type=application/xml

    您还应该通过验证程序运行它来确保XML文档有效。