Подтвердить что ты не робот

Я не вижу событие Event5 источника HTML5 с методом onmessage в Chrome

Я пытаюсь использовать объект EventSource с небольшим примером

Клиентская сторона, у меня есть эта страница с script:

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8" />
        <title>Welcome!</title>
    </head>
    <body>
        <div id="result"></div>
        <script type="text/javascript">
        var sse = new EventSource('event-source.php');

        sse.onmessage = function(event) {
            console.log(event.data);
            document.getElementById("result").innerHTML+=event.data + "<br>";
        }

        sse.onerror = function(event) {
        console.log(event);
        }

        </script>
    </body>
</html>

script вызывает event-source.php на сервере. Вот event-source.php:

<?php
header('Content-type: text/event-stream');
echo 'data: '.time().PHP_EOL;

Когда я пробую эту конфигурацию в Firefox, метод "onmessage" хорошо называется, но не с Chrome. Когда я помещаю метод "onerror", кажется, что он вызывается, но я не вижу причины ошибки.

Что мне делать?

4b9b3361

Ответ 1

В onmessage вы вызываете свойство требуемого объекта, почему бы вам не сделать то же самое в onerror?
Я думаю, что ваш onerror должен выглядеть следующим образом:

   sse.onerror = function(event) {
      console.log(event.message);
   }

Объяснение: https://developer.mozilla.org/en-US/docs/Server-sent_events/Using_server-sent_events  - эта ссылка говорит: "Когда возникают проблемы (...), создается событие error.

Поэтому, когда настраиваемая обработка ошибок вы должны узнать о структуре ErrorEvent:) Это выглядит следующим образом:

  • ErrorEvent.message (только для чтения) Является ли DOMString, содержащим человекочитаемое сообщение об ошибке, описывающее проблему.
  • ErrorEvent.filename (только для чтения) Является ли DOMString, содержащим имя файла script, в котором произошла ошибка.
  • ErrorEvent.lineno (только для чтения) Является целым числом, содержащим строку номер файла script, в котором произошла ошибка.
  • ErrorEvent.column (только для чтения) Является целым числом, содержащим столбец номер файла script, в котором произошла ошибка.
  • ErrorEvent.error (только для чтения) Является ли объектом JavaScript, который является заинтересованных в этом событии.

Дополнительная информация и источник: https://developer.mozilla.org/en-US/docs/Web/API/ErrorEvent

Ответ 2

КЛИЕНТ

<script>
if(typeof(EventSource) !== "undefined") {
var source = new EventSource("/html/demo_sse.php");
source.onopen = function() {
document.getElementById("myH1").innerHTML = "Getting server updates";
};
source.onmessage = function(event) {
document.getElementById("myDIV").innerHTML += event.data + "<br>";
};        
} else {
document.getElementById("myDIV").innerHTML = "Sorry, your browser does not support server-sent events...";
}
</script>

СЕРВЕР

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

    $time = date('r');
    echo "data: The server time is: {$time}\n\n";
    flush();
    ?>