【问题标题】:XMLHttpRequest, readyState issueXMLHttpRequest,readyState 问题
【发布时间】:2019-08-15 14:41:05
【问题描述】:

在网页中,我使用的是 XMLHttpRequest。 而且我遇到了麻烦,因为事情不像往常那样发生。

以下是相关代码:

  let xmlHttp = new XMLHttpRequest(); 
  xmlHttp.onreadystatechange = function() {
    if (this.readyState == 4 && this.status == 200) {
      // Here useful work is done.
      .......
    }
  }

  xmlHttp.open("GET","readUser.php?EL="+user.email,true);
  xmlHttp.send();

但最近由于某种原因,这种情况正在发生:

this.status == 200 (as expected)

但是:

this.readyState == 3 (and not 4 as usual)

结果,“有用的工作”没有完成。

我怎样才能让“this.readyState”回到 4?

或者我怎样才能找到为什么“this.readyState”不是应该的4?

我使用 XMLHttpRequest 的经验相当有限,所以当出现像这里这样的问题时,我有点迷失了。除了当我(独立地)运行“readUser.php?EL=somemail@example.com”时。没有问题,我没有发现任何问题。

我尝试过使用 Firefox、Chrome 和 Safari,得到了相同的行为;所以我认为这不是浏览器相关的问题。

++++++ 供参考,readUser是一个PHP页面,这里是readUser.php中的相关代码

<?php
....
ConnectToDB();

$query = 'SELECT * FROM MyDBTable';
$query .= sprintf(" WHERE MlAdr='%s'",$_GET['EL']);
$DBS=$Connection->query($query);
$DBS->setFetchMode(PDO::FETCH_ASSOC);
$dataJSON = json_encode($DBS->fetch());
echo $dataJSON;
?>

【问题讨论】:

  • 按照链接中的建议,我可以显示响应的长度,但它并没有告诉我为什么它没有走得更远。
  • 事实上长度是预期的长度。所以我想知道为什么 readyState 不去 4。

标签: javascript xmlhttprequest


【解决方案1】:

xmlHttp.onreadystatechange代替

xmlHttp.onload = function() {
  if (this.status == 200) {
    // Here useful work is done.
    .......
  }
}

xhr (XMLHttpRequest) 方法是 oldscool - 考虑使用更现代的方法:fetch

【讨论】:

  • 我刚试过“xmlHttp.onload = function()”。它没有用。
【解决方案2】:

检查 readUser.php 是否完成响应(发送所有数据并关闭连接)。

【讨论】:

  • 确实,我认为我没有关闭连接,从来没有这样做过。我只是查询数据库以获得我想要的并回显它。我应该如何关闭连接?
  • 尝试两个标题:连接:关闭内容长度:n(n = 输出大小,以字节为单位)
  • 我不确定你的评论的意思,所以我在帖子中添加了 readUser 的代码。你更容易让我知道你的意思。
  • 看起来不错,但请使用任何工具检查响应是否已完成。我不确定 php,但 node.js 可以打开连接,并在一分钟后“回显”某些内容,因此加载事件永远不会触发。可能是您正在使用某些工具或可以打印到打开的连接而无需关闭它的东西。为了更好的测试,请提供同样问题的测试服务器URL。
  • 或者试试“echo 123”看看有没有变化。
猜你喜欢
  • 1970-01-01
  • 2015-08-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-01-19
相关资源
最近更新 更多