【问题标题】:AJAX launched PHP script terminating without good reasonAJAX 启动 PHP 脚本无故终止
【发布时间】: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 中的“长轮询”(这里可能会出现类似的问题)。网上有很多关于这个的文章

标签: php jquery ajax


【解决方案1】:

问题是浏览器正在终止 PHP 脚本连接,即使脚本被配置为不超时超过一个小时并且按预期运行。我假设浏览器认为它无法正常运行。

这意味着使用长时间运行的 PHP 脚本轮询服务器实际上是不可能的,您必须在 JavaScript 端执行此操作,或者考虑更复杂的 long polling 解决方案,这里有很好的解释:

https://techoctave.com/c7/posts/60-simple-long-polling-example-with-javascript-and-jquery

非常感谢问题中回答此问题的人。

【讨论】:

    猜你喜欢
    • 2023-03-20
    • 1970-01-01
    • 1970-01-01
    • 2023-03-19
    • 2020-06-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多