0

我有一个 javascript 函数,它向我的服务器上的一个 php 文件发出 http_request,该文件生成一个 XML 文件(见下面的输出)。当返回 XML 文件时,相同的 javascript 函数会解析 XML(这是我的问题所在)并将其传递给其他函数;其中大部分处理。

到目前为止,我一直无法解析我的 XML 文档,也无法完全弄清楚原因。

XML

<Results><!--Root-->
  <Result_Set>
    <State>State</State>
    <Cities>
      <City>City 1</City>
      <City selected="true">City 2</City>
       ...ETC...
    </Cities>
    <Zipcodes>
       <Zipcode selected="true">Zipcode 1</Zipcode
       <Zipcode>Zipcode 2</Zipcode>
        ...ETC...
    </Zipcodes>
  </Result_Set>
</Results>

Javascript

function GetZipInfo(zipcode){
    var xmlhttp;
    var x,resultSet,state,cities,zipcodes

    if (window.XMLHttpRequest){// code for IE7+, Firefox, Chrome, Opera, Safari
        xmlhttp=new XMLHttpRequest();
      }
    else{// code for IE6, IE5
         xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
      }

    xmlhttp.onreadystatechange=function(){
        if (xmlhttp.readyState==4 && xmlhttp.status==200){  

            resultSet=xmlhttp.responseXML.documentElement.getElementsByTagName("Result_Set") //Function Crashes Here

            for(x=0;x<resultSet.length;x++){
                state=resultSet[x].getElementsByTagName("State")[0].nodeValue;
                cities=resultSet[x].getElementsByTagName("Cities");
                zipcodes=resultSet[x].getElementsByTagName("Zipcodes");

                selectState(state)
                xmlDropdown(cities, "City", "Cities")
                xmlDropdown(zipcodes, "Zipcode", "Zipcodes")
            }
        }
    }   
    xmlhttp.open("GET","GetZipInfo.php?Zipcode="+zipcode,true);
    xmlhttp.send();
}

我以前从未用任何语言解析过 XML 文档,所以我认为可以肯定地说我完全不知道哪里出了问题。

先感谢您!

编辑:事实证明,我的响应是以responseText而不是responseXML的形式返回的

响应文本

我正在使用php创建 XML 页面:

header("Content-Type: text/plain");
//Create the DOM
echo $xmlDoc->saveXML()

仍然不确定为什么它不作为 XML 返回。它可能与echo $xmlDoc->saveXML() 有关吗?

编辑:我同意一些评论,即我的问题在于 XML 文件中的标题。我在代码中添加了“alert(xmlhttp.responseText)”行。其中显示:

<?xml version="1.0"?>
<!--The Contents of my XML file-->

是否需要设置编码类型才能正常工作。如果是这样,我如何修改我的 PHP 代码(见上文)以插入该编码?

4

2 回答 2

1

您的响应的 MIME 类型应该是,或以( RFC 3023text/xml )结尾的东西。+xml

此外,您应该在第一行之前添加一个XML 声明。

最后但并非最不重要的一点是,虽然getElementsByTagName它适用于 HTML 文档中的所有元素,但您应该document.getElementsByTagName在 XML 文档中使用:

var resultSet = xmlhttp.responseXML.getElementsByTagName("Result_Set");
于 2012-07-17T19:11:22.720 回答
0

在您的代码顶部,您缺少:

<?xml version="1.0" encoding="UTF-8" ?>

还缺少';' 在这些行之后:

selectState(state)
xmlDropdown(cities, "City", "Cities")
xmlDropdown(zipcodes, "Zipcode", "Zipcodes")

在 XML 中也缺少 '>' 之后:

</Zipcode
于 2012-07-17T19:06:40.180 回答