IE7/8 responseText в readyState 3 недоступен
Я написал приложение с торнадо для поддержки обновлений в реальном времени на моем веб-сайте через потоковую передачу HTTP. Он работает во всех браузерах, кроме IE7 и IE8. Вот код, который обрабатывает потоковую передачу HTTP:
... code to create xhr object
xhr.open('GET', 'http://192.168.0.173:8888', true);
xhr.onreadystatechange = function() {
if(xhr.readyState == 3 && xhr.status==200) {
try {
alert(xhr.responseText);
} catch(e) {
alert("noo");
}
}
}
setTimeout("xhr.send(null);", 1000);
Проблема в том, что xhr.responseText недоступен, когда readyState равен 3. После нескольких часов работы в Google я узнал о IXMLHTTPRequest.responseStream. Я пытался использовать
xhr = new ActiveXObject("MSXML2.XMLHTTP.3.0");
но с тем же результатом. Запрос отправляется на сервер, и readyState равен 3, но xhr.responseStream недоступен.
Есть идеи? Или я должен вернуться к долгим опросам, когда я обнаружу IE?
Спасибо
Генри
1 ответ
Если вы снова прочитаете свою связанную страницу;
Для сравнения, версия Microsoft XML (MSXML) интерфейса IXMLHTTPRequest предоставляет частичные результаты через свойство responseStream, которое не реализована в собственной версии Windows Internet Explorer. Имейте в виду, что это поведение также отличается от интерфейса IServerXMLHTTPRequest, который предоставляет частичные результаты для responseBody и responseText.
Это, я думаю, один излишне сложный способ сказать, что эта вещь существует, но мы этого не делаем. Бесполезный IE. Мне просто нужно было реализовать то же самое и в итоге просто вернуться к долгому опросу IE.
Фонд Dojo использует Cometd, используя Bayeux. Но я считаю, что только Jetty в настоящее время реализует протокол Bayeux.
Итак, в заключение, IE, DIAF.