2011-11-15 7 views
0

は私が見る奇妙なものをXMLXmlHttpRequestオブジェクトで私が奇妙な結果をもたらすのはなぜですか?

xmlhttp = new XMLHttpRequest(); 

      xmlhttp.open("GET", "/TinyEditor/XML/PreviewBody.xml", true); 
      xmlhttp.send(); 
      alert(xmlhttp); 
      var xmlDoc; 
      if (xmlhttp.readyState == 4 && xmlhttp.status == 200) { 
       xmlDoc = xmlhttp.responseXML; 
      alert(xmlDoc); 
      } 
      alert(xmlDoc); 

を読んで取得するには、次のコードを使用していますXMLHTTPはXMLを読み取っているが、XMLDOCはエラーとして未定義います。 デバッガを適用してトレースすると、その場合にxmlDocが定義されません。なぜそうなのか?

答えて

2

デフォルトでは、リクエスト(非同期 JavascriptとXML)は非同期です。

つまり、xmlhttp変数にアクセスするのが早すぎます。それはreadyState === 4を持っていないので、その時点でステータス=== 200もありません。あなたは、毎回起動するonreadystatechangeハンドラにそれを入れなければなりません、現在のリクエストの準備完了状態が変わります。

xmlhttp.onreadystatechange = function() { 
    var xmlDoc; 
    if (xmlhttp.readyState == 4 && xmlhttp.status == 200) { 
     xmlDoc = xmlhttp.responseXML; 
     alert(xmlDoc); 
    } 
}; 

注意してください、上記は非常に最小限の例です。実世界のコードでは、ブラウザに依存するものをもっと必要とするでしょう(主にIE用)。

+0

私は、falseが働くので、3番目のパラメータを渡すいくつかの解決策を得ました。 – NoviceToDotNet

+0

どうすればJavascriptでキャッシュをクリアできますか?xmlHttpRequestは古い値を保持しています。 – NoviceToDotNet

+0

@NoviceToDotNet:キャッシュを避けるために、POSTリクエストを使用するか、クエリ文字列内にランダムなものを追加します。 – jAndy

0

定義されていないエラーがコードの最後の行から来た場合は、if句に値を定義したときに変数が定義されない可能性があります。

関連する問題