Php 如何在不等待完成的情况下逐步加载ajax(jquery)请求响应?
我想制作一个表单,使用jquery将关键字列表提交到一个php文件中,根据关键字列表的大小,加载这个文件可能需要很多时间 我想做的是在不使用iframe的情况下,将php响应实时加载到div或容器中Php 如何在不等待完成的情况下逐步加载ajax(jquery)请求响应?,php,ajax,asynchronous,jquery,Php,Ajax,Asynchronous,Jquery,我想制作一个表单,使用jquery将关键字列表提交到一个php文件中,根据关键字列表的大小,加载这个文件可能需要很多时间 我想做的是在不使用iframe的情况下,将php响应实时加载到div或容器中 我知道的所有ajax请求都必须等到请求完成后才能访问响应,即使响应尚未完成,我也需要访问该响应,以便实时更新进度。听起来您需要使用多个,较小的请求,而不是一个较大的请求。最近,Josh发布了关于COMET技术的帖子,这似乎很适合你。在php中有几个有趣的链接和示例 < /P> < P>更新:使用A
我知道的所有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)解决了这个问题。它工作得很好,因为我不需要解析任何东西,只需要以纯文本的形式获得输出。非常好。感谢您提供有关您体验的信息。