Я пытаюсь выполнить «потоковую передачу» (от сервера к клиенту) в Javascript с помощью ajax (с помощью XmlHttpRequest (= xhr). Я использую модифицированную функцию handleResponse, описанную в Кроссбраузерная реализация шаблона AJAX «HTTP Streaming» (push)
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, но Google Chrome и IE дают мне пустой responseText, в то время как xhr.readyState равно 3. Я нашел эту проблему, описанную в Интернете, но она не дала мне никакого решения.
Вы знаете, как обойти эту реализацию проблема в Chrome? (w3c говорит, что responseText не может быть NULL в readyState == 3 - Chrome реализовал это правило, но выдает только пустую строку)
И если вы не знаете, знаете ли вы какое-либо рабочее решение для некоторых продуктов? (фреймворки с открытым исходным кодом, библиотеки и т. д.)
Большое спасибо за ваши идеи.
Изменить: Обходной путь заключается в создании iframe, вызове скрипта для iframe и сбросе данных здесь и получении данных с помощью javascript из iframe. Но это не решение ajax. Я действительно хотел бы увидеть чистое решение ajax.