如何逐步加载ajax(jquery)请求响应而不等待它完成?

我想创建一个将使用jquery向php文件提交关键字列表的表单,这个文件可能需要花费大量时间来加载,具体取决于关键字列表的大小。

我想要做的是实时加载php响应到div或容器而不使用iframe。

我知道的所有ajax请求必须等到请求完成才能访问响应,我需要访问该响应,即使它还没有完成,所以我可以实时更新进度。

确实有一种方法。 使用普通的旧xmlhttpobjects,我监视了readyState。 就绪状态4表示请求已结束。 就绪状态3意味着我可以获得一些输出并等待更多:

request.onreadystatechange=function() { switch(request.readyState) { case 4: console.log("all good things come to an end"); break; case 3: console.log("o, hai!" + request.responseText); break; } } 

我相信你可以用jQuery实现同样的目标: jQuery:req.readyState == 3可能吗?

最近乔希发布了关于COMET技术的文章,这似乎适合你。 php中有几个有趣的链接示例。

如何使用AJAX / jQuery显示打印?

更新:使用Ajax的最可靠方法是将每个Ajax请求视为primefaces的:它可以工作,也可以不工作。

并且您(在页面上运行的JS)在您的请求执行时并没有真正得到任何反馈。 所以你需要多次通话。 不过要小心! 每次呼叫的大量开销和大多数浏览器一次只能执行一个或两个。

我建议对人类使用繁忙的指标。 您还可以显示每秒至少更新两次的倒计时时钟,以使其看起来像正在发生的事情。

添加:

您可能还想重新构建解决方案。 例如,通过提交请求将更新过程视为Ajax启动的批处理作业。 然后进行进一步的Ajax调用以学习(然后)向人类显示批处理作业的进度。

彗星和其他“保持管道开放策略”可以使用但很难可靠地工作并倾向于使用大量资源。 更多的行人轮询技术可以更容易上手。 然后根据需要进行优化

听起来你需要使用多个较小的请求而不是一个大的请求。