格式化SSE的麻烦

时间:2014-06-21 21:00:22

标签: javascript php jquery server-sent-events

我在网站上设置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

1 个答案:

答案 0 :(得分:0)

问题似乎是返回数据的部分:

echo 'data: ' . $posts . '\n\n';

我不知道为什么,但是当我把它改成

echo "data: $posts\n\n";

它起作用了......如果有人可以告诉我为什么会发生这种情况,或者如果他们遇到同样的问题,我会对原因感兴趣,但这对我来说是固定的。

编辑:感谢评论丹尼尔,原因是单引号不转换\ n项目。