假设我们有这样的ajax查询:
$.ajax({
url: "action.php",
success: function (response) {
//какое-то действие здесь
};
});
并且action.php:
<?php
while(true){
//выполняется какая-то логика
echo json_encode(//какие-то данные);
}
?>
是否可以在request中每次echo处理ajax完这个数据,然后等到下一个数据到来?
http 工作在请求-响应原则上,为了让你在没有客户端请求的情况下从服务器发送消息,你需要实现 web 套接字协议(也许还有其他的,我没有检查过),或者发送每个响应后的请求(好吧,接收它的部分)
好吧,一般来说,如果通过 vanilla JS(XHR) ,那么就会有一个事件
progress具有. 如果您在 50 毫秒 ( ) 处切断回声,(即,在这样的时间间隔内,浏览器会检查来自服务器的内容),但这对于 ASCII 中的拉丁语是正确的,因为 在 UTF-8 中,每个字符都存储在 2 个字节中,这种读取中间状态的尝试可能会导致显示不正确。这个决定是一个拐杖,毫无道理地扭曲,而且通常是不合适的,但是,因为它是必要的:eventresponseTextusleep(500000)echo 'foobar'; usleep(500000)xhr.onprogress = function(event){ console.log(event.responseText); }如果任务是跟踪服务器上某个非常大的进程的进度,那么我认为最正确的做法是生成一个进程 ID,将其发送到客户端,再发送到数据库,然后在那里更新进度. 并使用 ajax,通过第三方 php 文件,按 ID 检查进度。从示意图上看,它看起来像这样:
ajax =(event)=> php(process) =(uid)=> ajax =(uid)=> php(progress_observer) =(percentage)=> ajax =(uid)=> php(progress_observer) =(percentage_100)= >阿贾克斯
使用所谓的
comet:在服务器端:
在客户端: