jQuery超时等待服务器回复

时间:2013-03-14 03:06:09

标签: php javascript jquery

背景:

  • 我有两个页面(index.php和script.php)。
  • 我有一个从index.php调用script.php的jQuery函数。
  • script.php将执行大量数据处理,然后将该数据返回到index.php,以便可以向用户显示。

问题:

  • index.php似乎超时,因为script.php需要很长时间才能完成。 script.php有时可能需要4个小时才能完成处理,然后才能将数据返回到index.php。
  • 我之所以说index.php是超时的原因是b / c它永远不会更新,即使在script.php停止处理后也只是坐在那里一小时玻璃。
  • 我确信script.php确实成功完成了处理b / c我也将输出写入日志文件并看到所有内容都在处理中。
  • 如果script.php没有太多数据需要处理,那么index.php会按预期更新。
  • 调用script.php时,我没有在index.php中的函数内设置任何超时值。

在等待很长时间以完成script.php后,是​​否有更好的方法来更新index.php?我正在使用FireFox,那么它可能是FireFox问题吗?

2 个答案:

答案 0 :(得分:2)

你真的想要一个ajax电话需要四个小时来回应吗?这在网络和浏览器的正常工作方式中毫无意义。我强烈建议重新设计。

也就是说,jQuery的$.ajax()调用具有超时值,您可以将其设置为此处描述的选项:http://api.jquery.com/jQuery.ajax/。我不知道浏览器是否允许将其设置为长达四个小时且仍能正常运行。在任何情况下,要求保持浏览器连接打开并保持四小时不是一个高概率操作。如果有短暂的打嗝,你打算做什么?从头再来一次?这不是一个好的设计。

我建议重新设计的是你将问题分解成更小的部分,这些部分可以在更短的ajax调用中得到满足。如果你真的想要一个四小时的操作,那么我建议你用一个ajax调用开始操作,然后你每隔几分钟从浏览器轮询一次,询问工作完成的时间。最后完成后,您可以检索结果。这将与ajax调用和浏览器的正常工作方式更加兼容,如果在四小时内出现短暂的互联网故障,它将不会受到影响。

如果可能,您的第一个ajax调用也可以返回操作可能需要多长时间的近似值,这可以在浏览器中提供一些等待结果的有用UI。

这是一种可能性:

步骤1.发送请求作业开始的ajax调用。立即收回工作ID和有关工作估计时间的任何相关信息。

步骤2.根据作业的估计时间计算轮询间隔。如果估计值是四小时并且估计值通常是准确的,那么您可以设置计时器并在两小时内再次询问。在询问数据时,您发送第一个ajax调用返回的作业ID。

步骤3.当您接近预计完成时间时,您可以将轮询间隔缩小到可能几分钟。最终,您将收到一个轮询请求,表明数据已完成,并将数据返回给您。如果我正在设计服务器,我会将数据缓存在服务器上一段时间,以防客户端因任何原因再次请求它,这样您就不必重复四小时的过程。


哦,然后我会考虑更改服务器上的设计,以便每隔一天只需要四个小时。它应该是以某种批量方式预先构建和预先缓存(例如,每天几次),或者应该重做整个方案,以便在不到一分钟而不是四小时内满足常见查询。 / p>

答案 1 :(得分:0)

是否可以定期向index.php发回响应以“保持活着”?如果没有,也许可以将你的脚本分成几个较小的脚本,然后在一个小时内运行它们,而不是你上面提到的4个小时。