2010-04-12 3 views
5

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

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

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 проверить правильный способ справиться с этой проблемой, или есть лучшее решение?

+0

Не могли бы вы просто взглянуть на любую существующую реализацию, например. GWT, как вы упомянули, jquery и т. Д.? – fig

+0

@ fig-gnuton: Я не уверен, если действительно легко следовать сгенерированным кодом javascript (я не гуру javascript ...) –

+0

Если вы знаете достаточно, чтобы играть с необработанным XHR, вы будете не имеют проблем, глядя на JQuery или другие библиотеки. У них есть исходные версии, которые полностью комментируются. – fig

ответ

3

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

0

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