2013-03-14 148 views
0

背景:jQuery的时间进行等待服务器响应回

  • 我有两个页面(index.php文件和script.php的)。
  • 我有一个从index.php调用script.php的jQuery函数。
  • script.php会做大量的数据处理,然后将这些数据返回给index.php,以便它可以显示给用户。

问题:

  • 的index.php似乎超时因为script.php的正在采取长以完成。在将数据返回到index.php之前,script.php有时可能需要长达4小时才能完成处理。
  • 我说index.php是超时的原因是B/C它永远不会更新,只是坐在那里与一小时玻璃,即使在script.php停止处理后。
  • 我肯定知道的script.php没有完成成功处理B/C我正在写输出到一个日志文件,以及和看到的一切正在处理中。
  • 如果script.php没有太多数据需要处理,那么index.php会按照它应该更新的方式进行更新。
  • 在调用script.php时,我没有在index.php中的函数内设置任何超时值。

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

+0

分几步你的脚本不是一个选项? – 2013-03-14 03:09:16

回答

2

你认真想一个AJAX调用需要四个小时内做出回应?这在网络和浏览器的正常工作方式中毫无意义。我强烈建议重新设计。

也就是说,jQuery的$.ajax()调用有一个超时值,您可以设置为这里描述的选项:http://api.jquery.com/jQuery.ajax/。我不知道浏览器是否会允许它设置长达四个小时,并仍然正常运行。无论如何,要求浏览器连接保持打开状态并保持四个小时的活动并不是一个很高的可能性。如果出现短暂的呃逆,你打算怎么办?重新开始?这不是一个好设计。

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

如果可能的话,你的第一个Ajax调用也可以返回该操作可能花费的时间可能提供正在等待结果的浏览器一些有用的UI的近似值。

这里有一个可能性:

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

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

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


哦,然后我会考虑改变我的服务器上的设计,以便每隔四个小时定期请求任何东西。它应该以某种批处理方式(例如每天几次)预先构建和预缓存,或者应该重做整个方案,以便在不到一分钟而不是四个小时的情况下满足常见查询。

+0

谢谢你的建议。我绝对需要重新思考和重新设计。 – momo106 2013-06-10 19:23:11

0

是否可以定期发送响应回到刚才的index.php“保持它活着”?如果没有,可能会将您的脚本分成几个较小的脚本,并以一小时为单位运行它们,而不是上面提到的4小时。

相关问题