0

XMLファイルを生成するサーバー上のphpファイルにhttp_requestを作成するjavascript関数があります(以下の出力を参照)。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文書も解析したことがないので、何が悪いのか完全に迷っていると言っても過言ではありません。

前もって感謝します!

編集:私の応答がresponseXMLではなくresponseTextとして戻ってきていることがわかりました

responseText

私は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 に答える