2009-04-15 20 views
9

Próbuję uruchomić tę funkcję, która wysyła żądanie parametru url, a następnie wysyła tekst odpowiedzi do callback, który jest funkcją.Ajax nie przejdzie readyState 1, dlaczego?

Wygląda na to, że dostaje się tylko do readyState 1 (dzięki komendom Firebug).

Oto ona:

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

Witaj Joe, jestem zainteresowany, jakie było twoje rozwiązanie? Znalazłeś? Moim obejściem tego problemu było przypisanie zdarzenia onload zamiast onreadystatangeange (zobacz szczegóły poniżej w odpowiedziach). –

+0

Nie wiem ... Przepraszam, że nie byłem na stronie przez jakiś czas. Cóż, zadziałało, ale właśnie przełączyłem się na jQuery i działa poprawnie. – kennyisaheadbanger

Odpowiedz

3

I workarounded ten problem z przypisaniem onload imprezę zamiast 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

Konsola błędów: Uncaught ReferenceError: isFirefox nie jest zdefiniowany –

1

Prawdopodobnie prośba Ajax nie zwraca dane (tak, błąd po stronie serwera pewnego rodzaju). Spróbuj włączyć opcję "pokaż XMLHttpRequests" w konsoli firebug, aby to sprawdzić.

+0

Cóż, jest już włączony i zapisuję obiekt http, a sprawdzanie go daje ReadyState 4, ale zdarzenie nie jest wywoływane. Również strona zwraca dane prawidłowo – kennyisaheadbanger

+0

oh! działa na safari, ale nie na firefoxie! to bardzo dziwne – kennyisaheadbanger

+0

Próbowałem logować moją własną funkcję lib xmlHTTP w FF, bez problemu. W moim przypadku używam => if (httpRequest.readyState <4) {console.log (...);} else { [wykonaj wywołanie zwrotne]}. – KooiInc

2

Sprawdź, czy adres URL rzeczywiście odpowiada, odwiedzając go bezpośrednio w przeglądarce.

Testowanie za pomocą innej przeglądarki daje taki sam wynik.

Użyj jakąś formę monitorze HTTP obserwować klienta do serwera rozmowy (mój ulubiony to Fiddler)

0

również w obliczu tego samego kwestia. Czytając poniższy URL, moja została rozwiązana.

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

zasadzie, kiedy mój przypisać funkcję detektora zdarzeń dla httpRequest.onreadystatechange, nie mogę przekazać dowolną zmienną do niego. WIĘC, że muszę osadzić zmienną wewnątrz łańcucha HTTP POST do serwera zaplecza, a następnie uzyskać go z odpowiedzi HTTP.

Działa dobrze dla FF 3. Nie trzeba używać jQuery.

Powiązane problemy