Ich teste, um Daten mit SSE zu empfangen

Dies ist meine stream.php-Datei:

<?php
header('Content-Type: text/event-stream');
header('Cache-Control: no-cache');
$time = date('r');
echo "data: test\n\n";
flush();
?>

Um Daten zu empfangen, benutze ich:

var source=new EventSource("stream.php");
    source.onmessage=function(e)
    {
      //document.getElementById("result").innerHTML+=e.data + "<br/>";
        $("#result").html(e.data);
    };

Wenn ich document.getElementById("result") verwende, werden die Daten wiederholt angezeigt. Aber wenn ich $("#result").html(e.data) benutze, tut es das nicht. Warum ?

0
rezafahlevi08 20 Nov. 2013 im 20:40

3 Antworten

Beste Antwort

.innerHTML += fügt dem bereits vorhandenen HTML-Code hinzu, beachten Sie die +=, während die html() -Methode von jQuery den HTML-Code jedes Mal überschreibt.

JQuery verfügt über mehrere andere Methoden, die das vorhandene Markup ergänzen, z. B. append().

0
adeneo 20 Nov. 2013 im 16:42

Mit dem Vanila-Skript +=e.data hängen Sie den neuen Inhalt an das vorhandene Markup an, aber .html() überschreibt die vorhandenen Werte.

$("#result").append(e.data + '<br/>')

Oder

$("#result").html(function(_, html){
    return html += e.data + '<br/>';
})
0
Arun P Johny 20 Nov. 2013 im 16:42

Das += in .innerHTML+= hängt den Inhalt an den vorhandenen Inhalt an. Das wäre gleichbedeutend mit $("#result").html($("#result").html() + e.data);

0
j08691 20 Nov. 2013 im 16:43