Javascript 事件源';s响应的MIME类型(“text/html”)不是;文本/事件流;。正在中止连接。标题设置为文本/事件流
嗨,我使用sse在我的控制台中得到这个错误 EventSource的响应具有不是“文本/事件流”的MIME类型(“文本/html”)。正在中止连接 js代码是:Javascript 事件源';s响应的MIME类型(“text/html”)不是;文本/事件流;。正在中止连接。标题设置为文本/事件流,javascript,php,server-sent-events,Javascript,Php,Server Sent Events,嗨,我使用sse在我的控制台中得到这个错误 EventSource的响应具有不是“文本/事件流”的MIME类型(“文本/html”)。正在中止连接 js代码是: if (typeof(EventSource) !== "undefined") { var source = new EventSource("../api/updateWellData.php?uid=<?php echo $node_id ?>"); source.onmessage = functi
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
}
这是我第一次使用sse,我使用了以下文档:|我遇到了相同的问题,问题是php文件中出现语法错误,显示了错误消息。当php代码以错误格式输出文本时,会发生此错误。 这可能是一条PHP错误消息(所有这些消息都作为原始HTML输出),也可能是页面上不适合的其他文本 如果PHP文件的输出与
text/event stream
所需的格式不匹配,它将返回使用text/html
。Javascript要求事件流使用文本/事件流
内容类型,因此JS控制台将显示错误,但这只是实际问题的一个症状-要解决问题,需要修复PHP
在OP的例子中,问题在于他们的
echo
语句。输出到流的所有数据必须以数据:
进行,并以换行符\n
结束。流本身必须以另一个换行符结束,以指示后面不再有数据:
消息
要修复错误,OP应该更改
echo json_encode($result);
到
OP代码的另一个问题是在数据库查询中没有针对SQL注入的保护。虽然这与当前的问题无关,但值得指出的是,应该使用预先准备好的语句。我在laravel设置中也遇到了同样的问题。一些解决方案说删除php中的空格。但这并没有解决我的问题。按原样共享Web服务器的确切输出,包括标题和响应正文。没有我的
php
工作正常,我的JavaScript
echo json_encode($result);
echo "data: " . json_encode($result) . "\n\n";