我想在一段时间后停止SSE,并且需要重新连接。
在JavaScript中使用setInterval(function(){})
会导致错误:
source.close(); // <<-- ERROR : object is not defined
有人可以指导我寻求解决方案吗?
<script>
if(typeof(EventSource) !== "undefined"){
var source = new EventSource("sse_server.php");
// ReConnecting ST
setInterval(function(){
console.log("ReConnecting...");
source.close(); // <<---------- ERROR : object is not defined
var source = new EventSource("sse_server.php");
}, 6000);
// ReConnecting EN
source.addEventListener("response", function(event) {
document.getElementById("result").innerHTML += "<p>" + event.data + "</p>";
});
source.addEventListener("message_status", function(event) {
document.getElementById("result").innerHTML += "<p>" + event.data + "</p>";
});
source.onmessage = function(event) {
var json = JSON.parse(event.data);
if(json.category=="chat") {
document.getElementById("result").innerHTML += "<p>" + json.content.messageContent.messageText + "</p>";
}else{
document.getElementById("result").innerHTML += "<p>" + event.data + "</p>";
}
};
} else {
document.getElementById("result").innerHTML = "Sorry, your browser does not support server-sent events...";
}
</script>
答案 0 :(得分:1)
看看这个:
source.close(); // <<---------- ERROR : object is not defined var source = new EventSource("sse_server.php");
您已在功能范围内定义了一个不同变量,且其名称相同。由于您要等到下一行才给它赋值,所以它是undefined
。
如果您要从函数内部的更广泛的范围访问source
,请不要在函数内部的其他变量中重复使用该名称。
如果要覆盖更广泛的变量中的source
,请从函数内的行中删除var
,以便使用现有变量,而不必重新声明在本地范围内。