我有一个非常大的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'这样的字符串的输出,但我希望每个输出一个接一个地发送。这样的事情可能吗?如果是,请分享一个例子。
答案 0 :(得分:1)
理论上php脚本可以在执行期间将输出返回给客户端,但根据我的经验,这是不可靠的,因为Web服务器可能会缓存它。
我宁愿将您的大型PHP脚本分解为更小的部分,并分别调用每个部分。然后,每个较小的PHP脚本都可以向客户端返回消息,表明其进度。可以使用session功能在较小的PHP脚本之间共享上下文。
答案 1 :(得分:1)
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,已经为此创建了女巫。
&#34; Node.js使用事件驱动的非阻塞I / O模型,使其轻量且高效。 &#34;