确定/规避AJAX请求是否超时的方法?

时间:2011-09-30 10:25:56

标签: javascript ajax

我有一个简单的网页(PHP,JS和HTML),用于说明计算正在进行中。此计算由执行实际计算的PHP脚本的 JavaScript AJAX请求触发。 有关详细信息,请参阅 here

实际计算是什么,不起作用,所以为简单起见,它只是一个sleep() - 命令。

当我在本地执行相同的代码时(浏览器调用localhost:linux,apache,php-mod下的网站),它工作正常,与睡眠时间无关。

然而,当我让它在不同的机器上运行时(不是localhost,还有Linux,apache,php-mod),PHP脚本会运行(结果被创建),但是AJAX请求没有得到任何响应,所以如果睡眠时间> = 900秒,则没有“onreadystatechange”。当睡眠时间< 900秒它也很好地工作,AJAX请求被正确终止(readyState == 4和status == 200)。

apache和php配置或多或少是默认的,我已经验证了那里的关键选项(max_execution_time等),但是这里没有一个似乎是有效的,因为它们要么更短(<1分钟),要么更大,例如垃圾收集器(24分钟)。

所以我完全混淆了可能导致这种情况的原因。我认为它可能与网络有关,虽然我在路由器中找不到任何合适的选项。 此外,apache-logs或PHP中没有报告错误(错误登录到文件)。

让AJAX请求的JavaScript在成功返回时显示request.status,令人惊讶的是,当我在睡眠结束后在浏览器窗口中点击“Esc”时,我也会显示“200”状态,但不会自动显示应该这样做。

无论如何,我希望你可以知道如何规避这个问题? 也许每10分钟左右客户端和服务器之间的虚拟通信可能会有所帮助,但我不知道如何最好地做这样的事情,特别是让这对用户透明而不干扰实际的工作进行计算/睡眠。

最佳,

P.S。我引用的帖子是由我编写的,但似乎暗示它可能与某些配置选项有关,这似乎就是这种情况。这就是我在这里写这篇文章的原因,基本上要求一种方法来规避这样一个问题而不管它是什么来源。

1 个答案:

答案 0 :(得分:0)

我来自你提到的另一篇文章!

现在我对你要做的事情了解得更多:监控一个可能长时间运行的服务器工作,我可以推荐一些应该更好的东西,它不是你问题的直接答案,但它是一个设计考虑因素其性质包括更合适的解决方案。

基本上,取消“启动”服务器端任务的操作与监视其进度的链接。

  • execute.php在服务器上启动后台作业,并立即返回。
  • 另一个脚本/ URL(让我们称之为status.php)可用于检查execute.php正在执行的任务的进度。
    • 当请求status.php时,它将不会返回,直到它有报告的内容,超过30秒(或其他一些固定的)时间量,此时它返回一个你知道意味着“再次检查”的值”。在循环中执行此操作,可以立即通知您后台任务何时完成。

有关与此类似的方法的更多详细信息:http://billhiggins.us/blog/2011/04/27/resty-long-ops

我希望这有助于为您提供解决问题的设计方法!

相关问题