2011-03-07 71 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

相关问题