2009-04-15 6 views
9

Ich versuche, diese Funktion zu funktionieren, die eine Anfrage für Parameter url sendet dann den AntwortText zu callback, die eine Funktion ist.Ajax wird nicht über readyState 1, warum?

Es scheint, dass es nur zu readyState 1 kommt (dank der Firebug-Befehle).

Hier ist sie:

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

Hallo Joe, ich bin interessiert, was war Ihre Lösung? Hast du eins gefunden? Mein Workaround für dieses Problem war das Zuweisen eines Onload-Ereignisses anstelle einer Onreadystate-Änderung (siehe Details unten in den Antworten). –

+0

ich weiß nicht .... Entschuldigung, ich war eine Weile nicht auf der Website. Nun, es hat funktioniert, aber ich habe gerade zu jQuery gewechselt und es funktioniert einwandfrei. – kennyisaheadbanger

Antwort

3

I workarounded dieses Problem zuweisen Onload-Ereignis statt onreadystatechange zu sehen:

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

Fehler Konsole: Uncaught ReferenceError: isFirefox ist nicht definiert –

1

Möglicherweise ist der Ajax-Request-Daten nicht zurück (so, ein Server-Fehler irgendeiner Art). Versuchen Sie, die Option 'show XMLHttpRequests' in der Firebug-Konsole zu aktivieren, um dies zu überprüfen.

+0

Nun, es ist bereits an und ich protokolliere das http-Objekt und die Überprüfung gibt mir readyState 4, aber das Ereignis wird nicht aufgerufen. Auch die Seite gibt Daten richtig zurück – kennyisaheadbanger

+0

oh! Es funktioniert in Safari, aber nicht Firefox! das ist sehr merkwürdig – kennyisaheadbanger

+0

Versucht, meine eigene xmlHTTP lib-Funktion in FF zu loggen, kein Problem. In meinem Fall verwende ich => if (httpRequest.readyState <4) {console.log (...);} else { [exec der Rückruf]}. – KooiInc

2

Überprüfen Sie, ob die fragliche URL tatsächlich antwortet, indem Sie sie direkt im Browser aufrufen.

Test mit einem anderen Browser erhalten Sie das gleiche Ergebnis.

irgendeine Form von HTTP-Monitor Verwenden Sie den Client-Server-Konversation (mein Favorit ist Fiddler)

0

ich sah sich auch die gleiche Problem. Indem ich die URL unten gelesen habe, habe ich meine gelöst.

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

im Grunde, wenn ich meine Funktion als Ereignis-Listener für httpRequest.onreadystatechange zuweisen, ich kann keine Variable sie passieren. SO, dass ich die Variable innerhalb der HTTP-POST-Zeichenfolge in das Server-Backend einbetten muss, um sie dann von der HTTP-Antwort zurückzuholen.

Es funktioniert gut für FF 3. Keine Notwendigkeit, jQuery zu verwenden.

Verwandte Themen