XMLHttpRequest чтение прогрессивных данных не работает? - PullRequest
5 голосов
/ 29 сентября 2010

У меня проблемы с загрузкой XMLHttpRequest прогрессивных данных. Я получаю состояние 2, а затем состояние 3. После состояния 3 оно никогда больше не вызывается. Что я делаю неправильно? Я читаю где-то мне нужно сбросить данные, но как мне это сделать?

Вот мой код:

var xmlHttp = new XMLHttpRequest();
// try to connect to the server
try
{
  // initiate server request
  xmlHttp.open("GET", "http://208.43.121.133:8164/;", true);
  xmlHttp.setRequestHeader("Icy-Metadata", "1");
  xmlHttp.onreadystatechange = function() 
  {
    alert("status: "+xmlHttp.status);
    alert("State: "+xmlHttp.readyState);

    if (xmlHttp.readyState == 3)
    {
      alert(xmlHttp.responseText);
    }
  };
  xmlHttp.send(null);
}
// display an error in case of failure
catch (e)
{
  alert("Can't connect to server:\n" + e.toString());
}

мне разрешено читать xmlHttp.responseText, когда readyState равен 3?

Ответы [ 2 ]

0 голосов
/ 30 сентября 2010

Крану прав, вам не разрешено читать responseText, когда readyState равен 3. См. http://www.davidflanagan.com/2005/08/xmlhttprequestreadystate-3.html

Решение состоит в том, чтобы отправлять сообщение одновременно.Когда вы получите одно сообщение, просто сделайте еще один XHR.Вот как Google делает (сделал?) Толчок сервера.

0 голосов
/ 29 сентября 2010

Скорее всего, проблема в этом сегменте:

    if(xmlHttp.readyState == 3) {
        alert(xmlHttp.responseText);
    }

Причина в том, что xmlRequest еще не завершен (readyState = 4 после завершения).Когда вы запросили responseText преждевременно, это вызвало ошибку и остановило завершение кода.

Таким образом, вы изменили бы его на:

if(xmlHttp.readyState == 4) {
    alert(xmlHttp.responseText);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...