【发布时间】:2016-06-14 14:05:07
【问题描述】:
我有一个非常简单的 PHP 脚本:
ini_set('max_execution_time', 240000);
//Switch for terminating the test processing status loop
$completed = false;
while ($completed == false) {
sleep(2);
}
这是使用 AJAX 启动的,同样非常简单:
$.ajax({
url: "lib/check_processing_status.php",
timeout: 0,
async: true,
error: function() {
console.log("FAILURE");
},
success: function() {
console.log("SUCCESS");
}
});
此脚本应无限期运行,或至少在触发超时之前运行。然而,它在每次运行时都不同的持续时间后失败。有时只有 40 秒,有时是 1 分 10 秒。
为什么会失败!?
补充:
只是为了添加一些上下文,我有这样一个循环的原因是因为我将查询服务器以获取进程的进度,所以不是每 5 秒调用一次 AJAX 请求负载(填满控制台有 10 个请求的窗口),我认为留在 PHP 脚本中直到过程完成,然后在完成后返回。
【问题讨论】:
-
即使你将ajax超时设置为0,你的浏览器也可能不会无限期等待:stackoverflow.com/questions/7297833/…
-
你会说浏览器正在终止 php 脚本吗?
-
不是php脚本,而是连接。
-
连接会在一段时间后超时,你应该在前端而不是后端添加while/sleep。所以做一个请求,得到一个错误的结果,几秒钟后做另一个请求。
-
你正在尝试做的类似于 jQuery 中的“长轮询”(这里可能会出现类似的问题)。网上有很多关于这个的文章