两个看似相同的PHP echo块,一个不起作用?

时间:2013-09-06 03:04:18

标签: php json echo server-sent-events

我有两个看似相同的代码块。对于第一个,客户端文件(使用服务器发送事件连接)可以正确地接收和显示JSON数据,而使用其他代码则不能。我不能为我的生活找出原因。

这是第一个工作代码

header('Content-Type: text/event-stream');
header('Cache-Control: no-cache');

function sendMsg($id , $msg) {
  echo "id: $id" . PHP_EOL;
  echo "data: {\n";
  echo "data: \"name\": \"Bob\", \n";
  echo "data: \"msg\": \"$msg\", \n";
  echo "data: \"id\": $id\n";
  echo "data: }\n";
  echo PHP_EOL;
  ob_flush();
  flush();
}

sendMsg(1, 'hello');

在客户端文件中,data.name将显示“Bob”,data.msg将显示“hello”。

这是非工作代码

header('Content-Type: text/event-stream');
header('Cache-Control: no-cache');

$out .= "id: 1" . PHP_EOL;
$out .= "data: {\n";
$out .= "data: \"name\": \"Bob\",\n";
$out .= "data: \"msg\": \"hello\", \n";
$out .= "data: }\n";
$out .= PHP_EOL;
echo $out;
ob_flush();
flush();

对我来说似乎完全一样,但没有任何东西会显示出来!是什么赋予了?我甚至尝试翻译非工作代码以使用所有“echo”语句,而不是.out =,因此它与第一个语句几乎相同....是否有人看到错误/差异?

感谢您的帮助!

1 个答案:

答案 0 :(得分:3)

在你的第二个例子中,你发出的JSON字符串在它的末尾有一个悬空的逗号,这是无效的。

您正在发送:

{
    "name": "Bob",
    "msg": "hello",
}                 ^---Right there