Ajax no va a conseguir más allá de readyState 1, ¿por qué?
-
09-09-2019 - |
Pregunta
Estoy intentando conseguir esta función para trabajar, lo que hace una solicitud de parámetro url
continuación, envía el responseText a callback
que es una función.
Parece que sólo se pone a readyState 1
(gracias a los comandos de Firebug).
Aquí 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);
}
Solución
Me workarounded este problema asignando proceso de carga en lugar 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);
}
Otros consejos
Compruebe que la URL en cuestión no responde en realidad al visitar directamente en el navegador.
Prueba con un navegador diferente se obtiene el mismo resultado.
Utilice algún tipo de monitor de HTTP para ver el cliente a servidor de conversación (mi favorito es violinista )
Posiblemente la petición Ajax no devuelve datos (así, un error de lado del servidor de algún tipo). Pruebe a activar la opción 'Mostrar XMLHttpRequests' en la consola de Firebug, para comprobar esto.
También se enfrentó al mismo problema. Al leer la URL a continuación, yo tengo la mía resuelto.
http://bytes.com/topic/javascript / respuestas / 548442-ajax-readystate-1-pared
Básicamente, cuando se le asigno mi función que el detector de eventos para httpRequest.onreadystatechange, no puedo pasar una variable a la misma. Así entonces que tengo que incorporar la variable dentro de la cadena HTTP POST al servidor backend recuperarlo de la respuesta HTTP.
Funciona bien para FF 3. No hay necesidad de usar jQuery.
Yo tenía el mismo problema en Firefox, pero no en Chrome.
El problema fue mi respuesta había el tipo MIME a establecer "Application / octet-stream".
Si lo cambia a "text / html" hizo que funcione en Firefox también.