2009-04-15 5 views
9

Sto cercando di far funzionare questa funzione, che esegue una richiesta per il parametro url quindi invia responseText a callback che è una funzione.Ajax non supererà readyState 1, perché?

Sembra che arrivi solo a readyState 1 (grazie ai comandi di Firebug).

Eccolo:

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

Ciao Joe, mi interessa quale è stata la tua soluzione? Ne hai trovato uno? La mia soluzione a questo problema era assegnare un evento onload invece di onreadystatechange (vedi i dettagli di seguito nelle risposte). –

+0

non so .... mi dispiace non sono stato sul sito per un po '. beh, ha funzionato, ma sono passato a jQuery e funziona correttamente. – kennyisaheadbanger

risposta

3

ho workarounded questo problema assegnando evento onload invece di 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

Console di errore: Uncaught ReferenceError: isFirefox non è definito –

1

Forse la richiesta Ajax non restituisce i dati (quindi, un errore di lato server di qualche tipo). Prova a abilitare l'opzione 'mostra XMLHttpRequests' nella console di Firebug, per verificarlo.

+0

Beh, è ​​già acceso e registro l'oggetto http e l'ispezione mi dà readyState 4, ma l'evento non viene chiamato. Anche la pagina restituisce correttamente i dati – kennyisaheadbanger

+0

oh! funziona in safari ma non in Firefox! questo è molto strano – kennyisaheadbanger

+0

Ho provato a registrare la mia funzione lib xmlHTTP in FF, nessun problema. Nel mio caso uso => ​​if (httpRequest.readyState <4) {console.log (...);} else { [esegui la richiamata]}. – KooiInc

2

Verificare che l'URL in questione risponda effettivamente visitandolo direttamente nel browser.

Test con un browser diverso si ottiene lo stesso risultato.

utilizzare una qualche forma di monitoraggio HTTP per guardare al client di conversazione del server (il mio preferito è Fiddler)

0

Ho anche affrontato lo stesso problema. Leggendo l'url qui sotto, ho risolto il mio.

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

in fondo, quando ho assegnare la mia funzione come listener di eventi per httpRequest.onreadystatechange, non posso passare qualsiasi variabile ad esso. SO che devo incorporare la variabile all'interno della stringa HTTP POST sul back-end del server, quindi riprenderla dalla risposta HTTP.

Funziona bene per FF 3. Non è necessario utilizzare jQuery.