2017-07-12 13 views
1

xmlからデータをロードしようとしています。ここに私のコードのHttpRequest私はステータスコードを取得しています。ここでプレーンなjavascriptでxmlからデータを読み込めません

function myFunction(){ 
    debugger; 
     var url = "js/MyXml.xml"; 
     var httpRequest = new XMLHttpRequest(); 
      httpRequest.open('GET', url, true); 
      httpRequest.send(); 
     var xmlDoc=httpRequest.responseXML; 
    } 

あるとhttpRequest.responseXML = null

キャブあなたは私が間違っているの何私を助けてくださいです。それに

答えて

1

変更を:trueパラメータで

httpRequest.open('GET', url, false); 

あなたは非同期に要求を設定しています。

これは、リクエストが実行を終了する前にレスポンスを読むことを意味します。

最後のパラメータをfalseに設定すると、要求が同期するように設定され、要求が完了するまでWebページがブロックされます。

適切な方法は、非同期要求が完了したときにイベントを作成することです。ここで

は一例である:あなたのケースでは

function myFunction() { 
    debugger; 
    var url = "js/MyXml.xml"; 
    var httpRequest = new XMLHttpRequest(); 
    httpRequest.open('GET', url, true); 
    httpRequest.onload = function(oEvent) { 
     var xmlDoc = httpRequest.responseXML; 
     //Continue code here 
    } 
    httpRequest.send(); 

} 
3

、あなたは非同期だったのXMLHttpRequest呼び出しを、使用しています。また、実際の回答が到着する前に、ファイルから実際の応答を受け取っているかどうかにかかわらず、戻り値を変数に代入しようとしました。

いずれの場合でも、Asyncを使用することをお選びの場合(推奨)、下記のコードをご覧ください。 また、下記のリンクから、自分自身でさらに調査することをおすすめします。

に加えて
var url = "js/MyXml.xml"; 
var xhttp = new XMLHttpRequest(); 
var xmlDoc = null; 
xhttp.onreadystatechange = function() { 
    if (this.readyState == 4 && this.status == 200) { 
     xmlDoc = httpRequest.responseXML; 
    } 
}; 
xhttp.open("GET", url, true); 
xhttp.send(); 

、あなたは可能性も同様にあなたのjavascriptの環境で利用可能であるべきfetch、。 MDNによると、これはまだ実験的な技術ですが、有益な知識を提供します。

最後に、手元にある作業のために、このタスクをネイティブにしやすくするためのライブラリを使用することができます。XMLHttpRequest。そのうちの1つはjQueryです。それを使用する方が簡単かもしれません。

詳細はhereです。また、SO questionに従います。

関連する問題