Я не вижу событие 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", кажется, что он вызывается, но я не вижу причины ошибки.
Что мне делать?
Ответы
Ответ 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();
?>