Javascript 从PHP获取实时回复

Javascript 从PHP获取实时回复,javascript,php,jquery,ajax,post,Javascript,Php,Jquery,Ajax,Post,我有一个非常大的php脚本,可以使用$.post或ajax从jquery调用它。现在,由于这个脚本很长,我已经将它分为几个部分,所以我想要的是,当脚本的某些部分完成时,我想要回显一个标志,然后在jquery上读取该标志值并相应地显示一条注释。所以基本上我想要一个实时响应的加载程序 例如,假设我在php中有三个部分,一个用于验证,一个用于将数据保存到数据库中,最后一个用于创建文件并在其中保存日志。现在请记住,要么所有这些段都应该一个接一个地执行,要么都不执行,因此这是一个单独的调用。所以我想创建一

我有一个非常大的php脚本,可以使用$.post或ajax从jquery调用它。现在,由于这个脚本很长,我已经将它分为几个部分,所以我想要的是,当脚本的某些部分完成时,我想要回显一个标志,然后在jquery上读取该标志值并相应地显示一条注释。所以基本上我想要一个实时响应的加载程序

例如,假设我在php中有三个部分,一个用于验证,一个用于将数据保存到数据库中,最后一个用于创建文件并在其中保存日志。现在请记住,要么所有这些段都应该一个接一个地执行,要么都不执行,因此这是一个单独的调用。所以我想创建一个加载器,当每个片段完成时,它会通知用户。类似于下面的内容

<?php

/* code for segment one

......

*/

echo 1;

/* code for segment two

......

*/

echo 2;

/* code for segment three

......

*/

echo 3;

?>


现在你们中的大多数人一定已经明白了,这个脚本最终会生成一个像“123”这样的字符串输出,但我希望每个输出都一个接一个地发送。这样的事情可能吗?如果是,请分享一个例子。

理论上,php脚本可以在执行期间将输出返回给客户端,但根据我的经验,这是不可靠的,因为Web服务器可能会缓存它


我宁愿将您的大型php脚本分解为更小的部分,并分别调用每个部分。然后,每个较小的php脚本可以向客户端返回一条消息,表明其进度。通过使用该功能,可以在较小的php脚本之间共享上下文。

php是同步的,因此它逐行执行代码,并且长动作被阻塞

如果不想等待脚本响应,可以使用不同的php文件和不同的ajax调用来模拟异步执行

$.ajax({
    url: 'yourfile1.php',
    method: 'post',
    data: {

    }
}).done(function(response){
    $.ajax({
        url: 'yourScript2.php',
        method: 'post',
        data: {
            toPost: response
        }
    }).done(function(response2){
        // Ajax finished
    });
});
若您想要真正的服务器异步执行,可以在服务器端使用nodejs,witch已经为此创建

Node.js使用事件驱动的非阻塞I/O模型,使其轻量级且高效


试着删除
输出缓冲
并检查?这里您有一些关于。输出缓冲不起作用,但您是对的,该链接确实帮助了我。您想解释一下您解决了什么问题吗,因为我也在等待您的回答<代码>:)您确定在处理过程中需要提供反馈吗?文件的大小更像是一种气味,你应该使用更多的类,而不是你的程序太大。此外,验证数据并将其放入数据库不会花费很多毫秒,因此完整请求的返回速度应该比用户注意到请求已启动的速度快。会话功能的问题是,我永远不会知道用户何时离开。例如,在我的脚本中,如果某个段出现问题,我可以删除已经输入的记录并撤消操作,但使用会话时,我无法确定我在哪个段上,或者出了什么问题,在哪里以及要撤消操作需要做什么更改,等等。总之,Praveen Kumar的评论帮助我使用ob_flush();冲洗();解决我的问题并提供反馈。坦白地说,我不完全理解为什么你们认为使用会话不起作用。使用会话和从客户端控制执行应该会给您提供与在一个脚本中完成所有操作一样的能力。虽然这很有趣,但对我来说不是这样,因为我必须在不同的脚本中创建和分发我的片段,我不希望这样。