我正在使用 SSE 传输内容,而无需刷新网页。基本上我的主要过程如下:
$query = "SELECT something something";
$result = $mysqli->query($query);
// ^this will return multiple rows eventually
$content= array();
while($inside= $result->fetch_assoc()){
array_push($content,$inside);
}
//$content is now an array with multiple rows, all inserted corrected by debug
$final = json_encode($content);
//^ the json is encoded as supposed [{"something":"something"},{"another":...}]
echo "data: {$final}";
//^ which I then receive with javascript (or at least I want to).
flush();
问题是 JavaScript 中没有收到任何内容。没有错误,没有控制台日志,什么都没有。我尝试过在 javascript 中解决 json,但感觉可怕(根本没有 json)。这不可能吗?如果是的话应该怎么做呢? (我已经使用 time() 进行了测试,并且 javascript 完全可以正常转储数据)
<小时/>编辑:JAVASCRIPT
var source=new EventSource("test.php");
console.log("1");
source.onmessage=function(event)
{
console.log("inside .onmessage !!!");
var data = event.data;
//data.forEach(function(each){
// console.log(each);
//});
//var data = JSON.parse(event.data);
console.log(data);
};
评论部分与我的问题相关。所有其他行都使用 time() 函数进行调试。
最佳答案
您似乎忘记了 stream format :
Each message is separated by a pair of newline characters.
尝试
echo "data: {$final}\n\n";
关于javascript - 服务器发送的事件仅处理字符串吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20984678/