Комета (длинный опрос) и статус XmlHttpRequest - PullRequest
5 голосов
/ 12 апреля 2010

Я немного поиграюсь с необработанными объектами XmlHttpRequestObjects + Comet Long. (Обычно я бы позволил GWT или другой платформе справиться с этим для меня, но я хочу узнать об этом больше.)

Я написал следующий код:

function longPoll() {
  var xhr = createXHR(); // Creates an XmlHttpRequestObject
  xhr.open('GET', 'LongPollServlet', true);
  xhr.onreadystatechange = function () {
    if (xhr.readyState == 4) {

        if (xhr.status == 200) {
            ...
        }

        if (xhr.status > 0) {
            longPoll();
        }
    }
  }
  xhr.send(null);
}

...
<body onload="javascript:longPoll()">...

Я завернул вызов longPoll() в оператор if, который проверяет status > 0, потому что я обнаружил, что когда я покидаю страницу (просматривая что-то в другом месте или перезагружая ее), отправляется последний ненужный кометный вызов , [А в Firefox это даже вызывает серьезные проблемы при перезагрузке страницы, по какой-то причине я пока не до конца понимаю.]

Вопрос: Это status проверка правильности решения этой проблемы или есть лучшее решение?

Ответы [ 2 ]

3 голосов
/ 08 июня 2010

Мой текущий ответ - пока не доказано, что он ложный - это то, что решение верное.

0 голосов
/ 26 июня 2013

Мне нравится простота этого цикла .... Я думаю, что серверный сценарий должен находиться в режиме сна или, по крайней мере, до тех пор, пока не получит новые данные, прежде чем он будет считаться длительным опросом, хотя это обычный опрос. Я также добавил бы что-то, чтобы проверить, если запрос не удается, хотя. завернуть, что в попытке поймать Bloch должен сделать трюк

...