【问题标题】:Is aborting a POST XHR reliable?中止 POST XHR 可靠吗?
【发布时间】:2016-05-18 03:17:17
【问题描述】:

使用 PHP 5.4 运行 apache 服务器。

我有一个表单,它向服务器发布一个 xhr 请求,如果在当前 xhr 完成之前再次按下按钮,则中止先前的请求。

因此,如果我坐在那里,尽可能快地单击按钮(大约 100-150 毫秒内)并在我的网络选项卡中看到所有已取消的 XHR 堆积,然后让 last 请求真正完成,我检查了服务器,发现所有被取消的请求实际上都“完成”了它们在服务器上的任务(连接到数据库并将一些数据放入表中)。

也可能是相关的:在“工作”(插入数据库)之后发生的唯一事情是将状态字符串发送回客户端。

我读到您不应该依赖取消 HTTP 请求来实际取消服务器进程,但这里有些东西闻起来很可疑。

取消 XHR 请求是否可靠,或者我的服务器出了什么问题?

【问题讨论】:

标签: javascript php ajax


【解决方案1】:

XMLHttpRequest abort 仅用于防止卡住 UI,但不会取消服务器请求。

那么答案呢?服务器不可靠。

如果您计划一次阻止多个请求,您可以使用 1) 服务器端队列或 2) 在请求进行时简单禁用操作按钮(仅在请求完成时重新启用按钮)。我会说后者更简单。

【讨论】:

    【解决方案2】:

    HTTP 是一种无状态协议。当您从客户端中止您的POST 时,它只是阻止客户端侦听响应,但POST 已经发送到服务器。当服务器收到请求时,它不会坐在那里等待另一个请求;它只是对给定资源执行与POST 请求相关的操作。

    【讨论】:

      猜你喜欢
      • 2016-08-27
      • 2012-03-05
      • 2013-01-18
      • 2011-08-26
      • 2011-01-08
      • 2021-04-02
      • 1970-01-01
      • 1970-01-01
      • 2013-08-13
      相关资源
      最近更新 更多