背景:
问题:
在等待很长时间以完成script.php后,是否有更好的方法来更新index.php?我正在使用FireFox,那么它可能是FireFox问题吗?
答案 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个小时。