Ответ 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.

Другие вопросы по тегам