我在网站上设置SSE时遇到了一些麻烦,据我所知,问题是服务器端代码没有发送正确的消息格式。
以下是发送消息的服务器端PHP代码:
while($row = $result->fetch(PDO::FETCH_OBJ)){
$name = nameFromId($row->from);
$postBit = '<div class="card message-card ';
if($_SESSION['ID'] == $row->from){ $postBit .= 'right-card'; }else{ $postBit .= 'left-card'; }
$postBit .= '"><img class="message-avatar" src="http://komok.p110tech.co.uk/card/image/image.php?path=sys.png" width="74" height="73" <div class="inline"><h3>' . $name . '</h3></div><br/>' . $row->content . '</div>';
$post = str_replace(array("\n", "\r", "\t"), "", $postBit);
$posts .= $post;
}
if($posts == NULL){
echo "<div class=\"card message-card left-card\">There are no messages in this thread.</div>";
die;
}else{
echo 'data: ' . $posts;
flush();
}
这是用于检索它的JS代码:
$(document).ready(function () {
var lastmsg = "";
var t = new EventSource("http://komok.p110tech.co.uk/card/messages.php?m=1");
t.onmessage = function (e) {
if (lastmsg !== e.data) {
$("#messages").html(e.data);
lastmsg = e.data;
}
};
});
有人可以告诉我为什么这不起作用? 它的目的是检索消息然后在div中显示它,这里有一个jsfiddle:http://jsfiddle.net/64aaC/8/
我在控制台中看到没有错误,但它只是没有更新#messages div
答案 0 :(得分:0)
问题似乎是返回数据的部分:
echo 'data: ' . $posts . '\n\n';
我不知道为什么,但是当我把它改成
时echo "data: $posts\n\n";
它起作用了......如果有人可以告诉我为什么会发生这种情况,或者如果他们遇到同样的问题,我会对原因感兴趣,但这对我来说是固定的。
编辑:感谢评论丹尼尔,原因是单引号不转换\ n项目。