【问题标题】:AJAX request responseText is empty in Chrome? [duplicate]Chrome中的AJAX请求responseText为空? [复制]
【发布时间】:2013-12-20 17:38:44
【问题描述】:

我试图使最简单的 AJAX 请求成为可能,由于某种原因(出乎意料地)它在 IE 中有效,但在 Chrome 中无效?

代码如下:

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 header 放在代码之前,没有用。 Chrome中的JS控制台显示状态为200,收到800B,所以脚本收到了响应,但是看不到?

非常感谢您

【问题讨论】:

  • 因为它是异步的!
  • 复制警报代码并将其粘贴到下一行,然后重试。 *大吃一惊*alert(x.responseText);alert(x.responseText);
  • @KevinB 唯一有效的原因是请求可以快速完成,所以当您完成单击“确定”到第一个警报时,请求已经完成并且 responseText 现在是可用的。但是,您并不真的希望您的代码依赖于方便的时间安排。

标签: javascript php jquery ajax google-chrome


【解决方案1】:

XMLHttpRequest 是一个异步函数。

你应该这样做:

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

【讨论】:

  • 谢谢,但我得到了“未定义”的回复。不知道为什么。
  • @user3104270 我有同样的问题,不知道如何解决:(
  • 差不多但不完全。当 readyState 更改时,onreadystatechange 处理程序将被多次调用 - 仅当 this.readyState == 4 请求完成时。此外,处理程序的第一个参数不是响应,而是事件 - 您应该改为引用 this,这将是 XMLHttpRequest 实例本身。综上所述,您的处理函数应该类似于function() { if (this.readyState == 4) { alert(this.responseText); } }
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-04-01
  • 2016-06-26
  • 2011-06-24
  • 1970-01-01
  • 2018-09-07
相关资源
最近更新 更多