Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/239.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何在不等待完成的情况下逐步加载ajax(jquery)请求响应?_Php_Ajax_Asynchronous_Jquery - Fatal编程技术网

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

Php 如何在不等待完成的情况下逐步加载ajax(jquery)请求响应?,php,ajax,asynchronous,jquery,Php,Ajax,Asynchronous,Jquery,我想制作一个表单,使用jquery将关键字列表提交到一个php文件中,根据关键字列表的大小,加载这个文件可能需要很多时间 我想做的是在不使用iframe的情况下,将php响应实时加载到div或容器中 我知道的所有ajax请求都必须等到请求完成后才能访问响应,即使响应尚未完成,我也需要访问该响应,以便实时更新进度。听起来您需要使用多个,较小的请求,而不是一个较大的请求。最近,Josh发布了关于COMET技术的帖子,这似乎很适合你。在php中有几个有趣的链接和示例 < /P> < P>更新:使用A

我想制作一个表单,使用jquery将关键字列表提交到一个php文件中,根据关键字列表的大小,加载这个文件可能需要很多时间

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


我知道的所有ajax请求都必须等到请求完成后才能访问响应,即使响应尚未完成,我也需要访问该响应,以便实时更新进度。

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

最近,Josh发布了关于COMET技术的帖子,这似乎很适合你。在php中有几个有趣的链接和示例


< /P> < P>更新:使用Ajax最可靠的方法是将每个Ajax请求看作是原子的:它是有效的,或者不是。

而您(页面上运行的JS)在执行请求时并没有收到任何反馈。所以你需要多个电话。但是要小心!每次调用的开销很大,大多数浏览器一次只能执行一个或两个

我建议使用一个忙碌的指示灯来提醒人类。您还可以显示一个倒计时时钟,该时钟每秒至少更新两次,使其看起来好像发生了什么事情

增加:

您可能还想重新设计您的解决方案。例如,将更新过程视为一个批处理作业,Ajax通过提交请求启动该批处理作业。然后进行进一步的Ajax调用,以了解(然后)批处理作业的进度


Comet和其他“保持管道畅通”策略可以使用,但很难可靠地工作,而且往往会使用大量资源。一种更为普通的投票技术可能更容易实施。然后根据需要进行优化。

确实有办法。使用普通的旧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也可以达到同样的效果:

在解析部分接收到的响应时要小心。此外,Web服务器上或中间缓存服务器中通常存在缓冲。在使用此技术显示Ajax调用的中间结果之前,我会做很多测试。我同意(缓冲部分)。我通过在服务器上明智地使用ob_flush()和flush()(php)解决了这个问题。它工作得很好,因为我不需要解析任何东西,只需要以纯文本的形式获得输出。非常好。感谢您提供有关您体验的信息。