Ajax não terá passado readyState 1, por quê?
-
09-09-2019 - |
Pergunta
Eu estou tentando obter esta função para trabalho, que faz um pedido de parâmetro url
seguida, envia o responseText para callback
que é uma função.
Parece que ele só fica a readyState 1
(graças aos comandos Firebug).
Aqui está:
function Request(url, callback){
if (window.XMLHttpRequest) { // Mozilla, Safari, ...
httpRequest = new XMLHttpRequest();
} else if (window.ActiveXObject) { // IE
httpRequest = new ActiveXObject("Microsoft.XMLHTTP");
} else{
return false;
}
httpRequest.onreadystatechange = function(){
console.log(httpRequest.readyState);
if (httpRequest.readyState == 4) {
callback(httpRequest.responseText);
}
};
console.log(httpRequest, url);
httpRequest.open('GET', url, true);
httpRequest.send(null);
}
Solução
Eu contornado este problema atribuindo evento onload em vez de onreadystatechange:
function Request(url, callback){
if (window.XMLHttpRequest) { // Mozilla, Safari, ...
httpRequest = new XMLHttpRequest();
} else if (window.ActiveXObject) { // IE
httpRequest = new ActiveXObject("Microsoft.XMLHTTP");
} else{
return false;
}
var readyStateChange = function(){
console.log(httpRequest.readyState);
if (httpRequest.readyState == 4) {
callback(httpRequest.responseText);
}
};
if (isFirefox && firefoxVersion > 3) {
httpRequest.onload = readyStateChange;
} else {
httpRequest.onreadystatechange = readyStateChange;
}
console.log(httpRequest, url);
httpRequest.open('GET', url, true);
httpRequest.send(null);
}
Outras dicas
Verifique se o URL em questão faz realmente responder, visitando-o diretamente no navegador.
Test com um navegador diferente você obter o mesmo resultado.
Use algum tipo de HTTP monitorar para assistir o cliente a conversa servidor (o meu favorito é Fiddler )
Possivelmente o pedido Ajax não retorna dados (assim, um erro do lado do servidor de algum tipo). Tente habilitar a opção 'Mostrar XMLHttpRequests' no console do Firebug, para verificar isso.
Eu também enfrentou o mesmo problema. Ao ler a url abaixo, eu tenho o meu resolvido.
http://bytes.com/topic/javascript / respostas / 548442-ajax-readystate-1-wall
Basicamente, quando eu atribuo a minha função como o ouvinte de evento para httpRequest.onreadystatechange, não posso passar qualquer variável a ele. SO que eu tenho para incorporar a variável dentro da cadeia HTTP POST para o servidor back-end, em seguida, recuperá-lo a partir da resposta HTTP.
Ele funciona muito bem para FF 3. Não há necessidade de usar jQuery.
Eu tive o mesmo problema no Firefox, mas não no Chrome.
O problema era a minha resposta teve o conjunto mime-type para "Application / octet-stream".
alterá-lo para "text / html" fez funcionar no Firefox também.