2011-03-07 49 views
1

我寫了下面簡單的JavaScript代碼XmlHttpResponse.responseText何時會被來自服務器的響應填充?

<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> 
    <head> <title>ajax</title> </head> 
    <body> 
    <script type="text/javascript"> 
      var xhr = new XMLHttpRequest(); 
      var url = "http://localhost/javascript/test.php"; 
      xhr.open("GET", url); 
      alert(xhr); 
      xhr.send(null); 
      xhr.onreadystatechange = function() {alert("change");} 
      alert(xhr.responseText); 
    </script> 
    </body> 
    </html> 

結果顯示xhr.responseText是空的。 但下面的JavaScript代碼工作正常。爲什麼?

<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> 
    <head><title>ajax</title></head> 
    <body> 
    <script type="text/javascript"> 
      var xhr = new XMLHttpRequest(); 
      var url = "http://localhost/javascript/test.php"; 
      xhr.open("GET", url); 
      xhr.send(null); 
      xhr.onreadystatechange = 
      function() { 
       if (xhr.readyState == 4) alert(xhr.responseText); 
      }; 
    </script> 
    </body> 

    </html> 

以下是簡單的PHP代碼:test.php的

<?php 
    echo date("F j, Y, H:i:s"); 

回答

5

當回答來自服務器,瀏覽器會觸發該對象的onreadystatechanged事件,導致你連接到它的功能,被解僱,你需要在你的第一個例子做的是把這個行:

alert(xhr.responseText); 

您連接到onreadystatechanged事件的函數裏面。否則瀏覽器將在發送請求後立即處理該行。
此外,您必須檢查readystate是4(4:請求已完成且響應已準備就緒),並且它也值得檢查狀態爲200,這意味着一切正常。

+0

我將** function(){alert(「change」);} **添加到onreadystatechange事件中,所以當readystate更改時,會彈出一個警告窗口,然後單擊OK,然後再次準備好更改,另一個警報窗口彈出,我再次點擊它。點擊4次後,readystate == 4,然後我應該得到responseText。 – PeopleMoutainPeopleSea 2011-03-08 02:47:39

+0

完全沒有!因爲,在附加該函數之後立即執行該行: alert(xhr.resonseText); 並且永遠不會再回到那個位置,如果在點擊四次之後,您希望執行該行,則必須將它放在附加到onreadystatechanged的函數的{}之間。 一切順利! – r0nny1l 2011-03-08 06:27:52

0

與r0nny的回答類似,您的第一個示例在您的ajax調用返回之前得到處理。使用onreadystatechange等待ajax響應,然後執行你需要的操作。

+0

+1對於r0nny :) – TNC 2011-03-07 09:11:54

相關問題