XmlHttpRequest.responseText ao carregar (readyState == 3) no Chrome
Estou tentando "streaming" (do servidor para o cliente) em Javascript por ajax (por XmlHttpRequest (= xhr). Estou usando a função handleResponse modificada descrita emImplementação em vários navegadores do padrão 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;
}
Com o script php, que libera os dados (sem ajax, ele libera os dados para o navegador enquanto progride)
Não tenho nenhum problema no Firefox, mas o Google Chrome e o IE me dão uma resposta vaziaText enquanto xhr.readyState é igual a 3. Encontrei esse problema descrito na Internet, mas não me deu nenhuma solução.
Você sabe como passar por esse problema de implementação no Chrome? (o w3c diz que o responseText não pode ser NULL no readyState == 3 - o Chrome implementou esta regra, mas fornece apenas uma sequência vazia)
E se você não sabe, conhece alguma solução funcional em alguns produtos? (frameworks de código aberto, bibliotecários etc.)
Muito obrigado por suas idéias.
Editar: A solução alternativa é criar iframe, chame o script para iframe e liberar dados aqui e obter dados por javascript do iframe. Mas essa não é uma solução ajax. Eu realmente gostaria de ver uma solução ajax pura.