php ob_implicit_flush无法正常工作

时间:2016-10-26 20:04:51

标签: php ajax

我想向我的ajax脚本发送非常快速的更新,所以我正在回复PHP脚本中的一些状态语句。

问题是,如果PHP运行得太快并且快速输出太多状态更新,那么ajax脚本通常会不一致地获取信息,并认为JSON格式不正确。

这是我认为应该有用的东西,但它没有:

ob_implicit_flush(true);
ob_end_flush();

for($i = 0; $i < 20; $i++){
    sendMsg($i);
}

function sendMsg($msg){
    echo json_encode(array('msg' => $msg));
}

JS以输出块的形式获取消息,而不是像我期望的那样获得每个单独的部分。就每次运行脚本时发送回JS的数量而言,它是相当不一致的。

这是我得到的示例输出。我期待20条消息,但我从PHP获得2条返回消息:

{"msg":0}
{"msg":1}{"msg":2}{"msg":3}{"msg":4}{"msg":5}{"msg":6}{"msg":7}{"msg":8}{"msg":9}{"msg":10}{"msg":11}{"msg":12}{"msg":13}{"msg":14}{"msg":15}{"msg":16}{"msg":17}{"msg":18}{"msg":19}

如果我将sleep(1)添加到for循环中,它可以正常工作,但这会减少不必要的速度,只是为了获得良好的输出。

有什么想法吗?

0 个答案:

没有答案