XmlHttpRequest.responseText при загрузке (readyState == 3) в Chrome - PullRequest
7 голосов
/ 07 октября 2010

Я пытаюсь выполнить «потоковую передачу» (с сервера на клиент) в Javascript с помощью ajax (с помощью XmlHttpRequest (= xhr). Я использую модифицированную функцию handleResponse, описанную в Кросс-браузерная реализация «HTTP Streaming» (push) Шаблон AJAX

function handleResponse() {
if (http.readyState != 4 && http.readyState != 3)
    return;
if (http.readyState == 3 && http.status != 200)
    return;
if (http.readyState == 4 && http.status != 200) {
    clearInterval(pollTimer);
    inProgress = false;
}
// In konqueror http.responseText is sometimes null here...
if (http.responseText === null)
    return;

while (prevDataLength != http.responseText.length) {
    if (http.readyState == 4  && prevDataLength == http.responseText.length)
        break;
    prevDataLength = http.responseText.length;
    var response = http.responseText.substring(nextLine);
    var lines = response.split('\n');
    nextLine = nextLine + response.lastIndexOf('\n') + 1;
    if (response[response.length-1] != '\n')
        lines.pop();

    for (var i = 0; i < lines.length; i++) {
        // ...
    }
}

if (http.readyState == 4 && prevDataLength == http.responseText.length)
    clearInterval(pollTimer);

inProgress = false;
}

С помощью php-скрипта, который сбрасывает мне данные (без ajax он действительно сбрасывает данные в браузер во время выполнения)

У меня нет проблем в Firefox, но GoogleChrome и IE дают мне пустой responseText, тогда как xhr.readyState равен 3. Я нашел эту проблему, описанную в Интернете, но она не дала мне никакого решения.

Знаете ли вы, как пройти мимо этогопроблема реализации в Chrome? (w3c говорит, что responseText не может быть NULL в readyState == 3 - Chrome реализовал это правило, но выдает только пустую строку)

А если вы не знаете, знаете ли выкакое-либо рабочее решение в некоторых продуктах? (фреймворки с открытым исходным кодом, библиотеки и т. д.)

Большое спасибо за ваши идеи.

Редактировать: Обходной путьпри создании iframe вызывайте скрипт для iframe, сбрасывайте здесь данные и извлекайте данные с помощью javascript из iframe.Но это не решение Ajax.Я действительно хотел бы видеть чистое решение ajax.

Ответы [ 11 ]

0 голосов
/ 07 октября 2010

URL, на который вы отправляете запрос - является ли он частью вашего домена?

Это может произойти из-за той же политики происхождения .

См. вопрос и возможные способы его обхода (и эту статью ).

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