Как передать объект «Отправленное сервером событие» в setInterval (function () {...}) - PullRequest
1 голос
/ 27 марта 2019

Я хочу остановить SSE через некоторый интервал, и мне нужно снова подключиться.

Использование setInterval(function(){}) в JavaScript дает ошибку:

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> 

1 Ответ

1 голос
/ 27 марта 2019

Посмотрите на это:

source.close(); // <<---------- ERROR : object is not defined
var source = new EventSource("sse_server.php");

Вы определили другую переменную с тем же именем в области действия вашей функции. Поскольку вы не присваиваете ему значение до следующей строки, это undefined.

Если вы хотите получить доступ к source из более широкой области видимости внутри функции, не используйте повторно имя другой переменной внутри функции.

Если вы хотите перезаписать source в более широкой переменной, то удалите var из строки внутри функции, чтобы вы использовали существующую переменную и не переименовывали ее в локальной области видимости. .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...