我想创建一个使用jquery向php文件提交关键字列表的表单,根据关键字列表的大小,这个文件可能需要花费很多时间才能加载。
我想要做的是在不使用iframe的情况下将php响应实时加载到div或容器中。
我知道的所有ajax请求必须等到请求完成才能访问响应,我需要访问该响应,即使它还没有完成,所以我可以实时更新进度。 / p>
答案 0 :(得分:4)
确实有办法。使用普通的旧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: Is req.readyState == 3 possible?
答案 1 :(得分:1)
最近Josh发布了关于COMET技术的文章,这似乎适合你。 php中有几个有趣的链接示例。
答案 2 :(得分:1)
更新:使用Ajax的最可靠方法是将每个Ajax请求视为原子的:它可以工作,也可以不工作。
当你的请求正在执行时,你(页面上运行的JS)并没有得到任何反馈。所以你需要多次通话。不过要小心!每次呼叫的大量开销和大多数浏览器一次只能执行一个或两个。
我建议对人类使用繁忙的指标。您还可以显示每秒至少更新两次的倒计时时钟,以使其看起来像正在发生的事情。
添加了:
您可能还想重新构建解决方案。例如,通过提交请求将更新过程视为Ajax启动的批处理作业。然后进行进一步的Ajax调用以学习(然后)向人类显示批处理作业的进度。
彗星和其他“保持管道开放策略”可以使用但很难可靠地工作并且倾向于使用大量资源。更多的步行轮询技术可以更容易上手。然后根据需要进行优化。答案 3 :(得分:0)
听起来你需要使用多个较小的请求而不是一个大请求。