如何在不等待它完成的情况下逐步加载ajax(jquery)请求响应?

时间:2010-05-02 15:45:18

标签: php ajax asynchronous jquery

我想创建一个使用jquery向php文件提交关键字列表的表单,根据关键字列表的大小,这个文件可能需要花费很多时间才能加载。

我想要做的是在不使用iframe的情况下将php响应实时加载到div或容器中。

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

4 个答案:

答案 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中有几个有趣的链接示例。

How do I show the print with AJAX/jQuery?

答案 2 :(得分:1)

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

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

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

添加了:

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

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

答案 3 :(得分:0)

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

相关问题