2013-12-20 40 views
1

我试图让最简单的AJAX请求成为可能,出于某种原因(意外)出现在IE中,但不在Chrome中?Chrome中的AJAX请求responseText为空?

下面是代码:

var x = new XMLHttpRequest(); 
x.open("GET","style.php",true); 
x.send(); 
alert(x.responseText); 

最后一行仅仅使空“警报”窗口弹出。

的PHP代码:

<?php 
    header("Content-Type: text/plain"); 
    echo "HELLO"; ?> 

有人建议我把text/plain的报头中的代码之前,没有工作。 Chrome中的JS控制台显示收到的状态为200和800B,因此脚本收到响应,但没有看到它?

非常感谢您提前

+0

因为它是异步! – epascarello

+1

复制警报的代码并将其粘贴到下一行,然后重试。 \ *头脑风暴\ *'警报(x.responseText);警报(x.responseText);' –

+0

@KevinB唯一的原因是该请求很快完成,所以当你完成点击“确定“到第一个提醒,请求已完成,并且现在可以使用responseText。但是,您并不希望代码依赖于方便的时间。 – Niall

回答

2

XMLHttpRequest是一个异步函数。

你应该这样做:

var x = new XMLHttpRequest(); 
x.open("GET","style.php",true); 
x.send(); 
x.onreadystatechange = function(response) { 
alert (response.responseText); 
}; 
+1

谢谢,但我得到了“未定义”的回应。无法弄清楚原因。 – user3104270

+0

@ user3104270我有同样的问题,不知道如何解决:( – Muhammed

+0

差不多,但不完全onreadystatechange处理程序将被调用多次readyState更改 - 只有当this.readyState == 4是请求完成。此外,处理程序的第一个参数不是响应,而是事件 - 您应该引用“this”,它将是XMLHttpRequest实例本身。将它们放在一起,您的处理函数应该是' function(){if(this.readyState == 4){alert(this.responseText);}}' – Niall