代码之家  ›  专栏  ›  技术社区  ›  Alastair Pitts

使用javascript在IE中加载XML时未检测到根节点

  •  0
  • Alastair Pitts  · 技术社区  · 14 年前

    我正试图使用JavaScript解析一个XML文件,但在IE7上遇到了一些问题。

    如果我有这个代码:

    function LoadXml()
    {
        var xmlPath = document.getElementById("hsTreeviewXmlPath").value;
    
        var xmlhttp=false;
        /*@cc_on @*/
        /*@if (@_jscript_version >= 5)
        // JScript gives us Conditional compilation, we can cope with old IE versions.
        // and security blocked creation of the objects.
         try {
          xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
          alert("here1");
         } catch (e) {
          try {
           xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
           alert("here2");
          } catch (E) {
           xmlhttp = false;
          }
         }
        @end @*/
        if (!xmlhttp && typeof XMLHttpRequest!='undefined') {
            try {
                xmlhttp = new XMLHttpRequest();
                alert("here3");
            } catch (e) {
                xmlhttp=false;
            }
        }
        if (!xmlhttp && window.createRequest) {
            try {
                xmlhttp = window.createRequest();
                alert("here4");
            } catch (e) {
                xmlhttp=false;
            }
        }
    
        xmlhttp.open("GET",xmlPath,false);
        xmlhttp.send(null);
    
        var xmlDoc = xmlhttp.responseXML;
    
        ParseXml(xmlDoc);
    }
    
    function ParseXml(xmlDoc)
    {
        var root = xmlDoc.documentElement;
        alert(root);
    
        for(i=0; i< root.childNodes.length; i++)
        {
            var node = root.childNodes[i];
            if(node.nodeType ==1) //process element nodes (type 1)
            {
                if(node.childNodes.length > 1)
                {
                    CreateChildren("hsTreeview",node);
                }
                else
                {
                    AddNode("hsTreeview", node);
                }
            }
        }
    }
    

    在FF和Chrome中,这可以正常工作,按应该的方式添加节点,但在IE7中,我得到一个脚本错误和特定错误:

    需要的对象

    这将给出与该行相关的行号:

    for(i=0; i< root.childNodes.length; i++)
    {
    

    警报框告诉我,在IE中,根节点 xmlDoc.documentElement 是空的。

    我已经确认,使用此处的警报1等,在IE7中,它使用 xmlhttp = new ActiveXObject("Msxml2.XMLHTTP"); 对象。

    有没有办法解决这个问题,因为它真的很令人沮丧?

    1 回复  |  直到 14 年前
        1
  •  1
  •   Alex Jasmin    14 年前

    确保XML文件具有正确的文本/XML mime类型。

    编辑波纹管:

    还要确保XML文件通过 HTTP协议 来自同一服务器 领域 港口 作为网页。由于安全原因,IE将阻止网页访问其原始域之外的URL或本地计算机上的文件。