gpt4 book ai didi

javascript - EventSource 的响应具有 MIME 类型 ("text/html")不是 "text/event-stream"。中止连接。 header 设置为文本/事件流

转载 作者:行者123 更新时间:2023-12-01 16:18:49 24 4
gpt4 key购买 nike

嗨,我使用 sse 在控制台中收到此错误

EventSource 的响应具有不是“text/event-stream”的 MIME 类型(“text/html”)。中止连接。

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

最佳答案

当您的 PHP 代码以错误的格式输出文本时,会发生此错误。

这可能是 PHP 错误消息(所有这些都作为原始 HTML 输出),或者页面上不适合 the text/event-stream format 的其他文本.

如果 PHP 文件的输出与 text/event-stream 要求的格式不匹配,它将回退到使用 text/html . Javascript 要求事件流使用 text/event-stream content 类型,因此 JS 控制台将显示错误,但这只是实际问题的症状 - 要修复您需要修复 PHP 的问题。

在 OP 的情况下,问题在于他们的 echo陈述。输出到流的所有数据必须由 data: 处理。 , 并以换行符 \n 结束.流本身必须以另一个换行符结束,以表明不再有 data:。消息跟随。

要修复错误,OP 应该更改

echo json_encode($result);


echo "data: " . json_encode($result) . "\n\n";

OP 代码的另一个问题是在数据库查询中没有针对 SQL 注入(inject)的保护。虽然这与手头的问题无关,但值得指出的是,应该使用准备好的语句。

关于javascript - EventSource 的响应具有 MIME 类型 ("text/html")不是 "text/event-stream"。中止连接。 header 设置为文本/事件流,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53591954/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com