2009-04-15 14 views
9

Estoy tratando de hacer que funcione esta función, que hace una solicitud para el parámetro url y luego envía el texto de respuesta a callback que es una función.Ajax no pasará listo Estado 1, ¿por qué?

Parece que solo llega 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); 
} 
+0

Hola Joe, estoy interesado ¿cuál fue tu solución? ¿Encontraste alguno? Mi solución a este problema fue asignar eventos onload en lugar de onreadystatechange (ver detalles a continuación en las respuestas). –

+0

no lo sé ... lo siento, no he estado en el sitio por un tiempo. Bueno, funcionó, pero acabo de cambiar a jQuery y está funcionando correctamente. – kennyisaheadbanger

Respuesta

3

I 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); 
} 
+0

Consola de error: Unbeught ReferenceError: isFirefox no está definido –

1

Posiblemente la petición Ajax no devuelve datos (así, un error de lado del servidor de algún tipo). Intente habilitar la opción 'show XMLHttpRequests' en la consola Firebug, para verificar esto.

+0

Bueno, ya está encendido y registro el objeto http e inspeccionarlo me da ReadyState 4, pero el evento no se está llamando. Además, la página devuelve los datos correctamente – kennyisaheadbanger

+0

¡oh! ¡funciona en safari pero no en Firefox! eso es muy extraño – kennyisaheadbanger

+0

Intenté registrar mi propia función lib xmlHTTP en FF, no hay problema. En mi caso, uso => ​​if (httpRequest.readyState <4) {console.log (...);} else { [exec callback]}. – KooiInc

2

Compruebe que la URL en cuestión realmente responde visitándola directamente en el navegador.

Pruebe con un navegador diferente si obtiene el mismo resultado.

utilizar algún tipo de monitor de HTTP para ver el cliente para la conversación servidor (mi favorito es Fiddler)

0

que también se enfrentó a la misma problema. Al leer la url a continuación, obtuve la mía resuelta.

http://bytes.com/topic/javascript/answers/548442-ajax-readystate-1-wall

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Í QUE tengo que insertar la variable dentro de la cadena HTTP POST en el backend del servidor y luego recuperarla de la respuesta HTTP.

Funciona bien para FF 3. No es necesario utilizar jQuery.

Cuestiones relacionadas