Ответ EventSource имеет тип MIME ("text/html"), который не является "text/event-stream". Прерывание соединения. заголовок установлен в текстовый / событийный поток
Привет я получаю эту ошибку в моей консоли с помощью sse
Ответ EventSource имеет тип MIME ("text/html"), который не является "text/event-stream". Прерывание соединения.
JS код:
if (typeof(EventSource) !== "undefined")
{
var source = new EventSource("../api/updateWellData.php?uid=<?php echo $node_id ?>");
source.onmessage = function(event) {
var response = JSON.parse(event.data);
document.getElementById("result").innerHTML = response.test;
// some code like the above line
};
}
else
{
// refresh the page every 30 secs
}
Код PHP это:
header('Cache-Control: no-cache');
header("Access-Control-Allow-Origin: *");
header("Content-Type: text/event-stream");
require_once("../resources/config.php");
if (isset($_GET['uid']))
{
$uid = $_GET['uid'];
while (1)
{
$query = Query("SELECT * FROM well_data_last WHERE well_detail_id = $uid");
$result = fetch_array($query);
echo json_encode($result);
ob_end_flush();
flush();
sleep(1);
}
}
Я впервые использую sse, я использовал следующие документы: mozilla | w3schools
0 ответов
Эта ошибка возникает, когда ваш PHP-код выводит текст в неправильном формате.
Это может быть либо сообщение об ошибке PHP (все из которых выводятся в качестве исходного HTML), или какой -либо другой текст на странице, которая не соответствует text/event-stream
формат.
Если вывод файла PHP не соответствует формату, требуемому text/event-stream
, он вернется к использованию text/html
. Javascript требует, чтобы потоки событий использовалиtext/event-stream
тип содержимого, поэтому консоль JS покажет ошибку, но это всего лишь симптом реальной проблемы - чтобы исправить проблему, вам нужно исправить свой PHP.
В случае OP проблема заключается в их echo
заявление. Все данные, выводимые в поток, должны обрабатыватьсяdata:
, и закончился новой строкой \n
. Сам поток должен заканчиваться другой новой строкой, чтобы указать, что больше нетdata:
сообщения следуют.
Чтобы исправить ошибку, OP следует изменить
echo json_encode($result);
к
echo "data: " . json_encode($result) . "\n\n";
Еще одна проблема с кодом OP заключается в том, что в запросе к базе данных нет защиты от SQL-инъекции. Хотя это не имеет отношения к рассматриваемой проблеме, стоит отметить, что вместо этого следует использовать подготовленные операторы.
I hade the same problem and the problem was a syntax error in the php file which showed an error message.