2010-12-29 6 views
6

Używam jQuery 1.4.2 i próbuję wykonać proste żądanie AJAX. Docelowy URL zwraca ciąg JSON (sprawdziłem go za pomocą jslint). Żądanie działa w przeglądarce Firefox i Chrome, ale nie chce działać w IE8 i nie mogę określić, dlaczego. Oto połączenie:jQuery AJAX żąda niepowodzenia w IE8 z komunikatem "Błąd: tej metody nie można wywołać, dopóki nie zostanie wywołana metoda otwarta".

jQuery.ajax({ 
url: 'http://' + domain + '/' + 'helper/echo/', 
dataType: 'json', 
success: function(data) { 
alert(data); 
}, 
beforeSend: function(request, settings) { 
alert('Beginning ' + settings.dataType + ' request: ' + settings.url); 
}, 
complete: function(request, status) { 
alert('Request complete: ' + status); 
}, 
error: function(request, status, error) { 
alert(error); 
} 
}); 

IE wykona wywołanie zwrotne beforeSend i wywołanie zwrotne błędu. Alarmy błąd wywołania zwrotnego z komunikatem:

Error: This method cannot be called until the open method has been called. 

moja odpowiedź zwraca nagłówek z Content-Type: text/javascript; charset=UTF-8.

Co się dzieje z IE? Uruchomiłem serwer na localhost, wysyłając żądanie od http://localhost:8080/psx do http://localhost:8080/helper. Może IE blokuje tę prośbę? Próbowałem zainstalować Fiddlera, aby analizować ruch żądania, ale nie będzie on działał na moim komputerze, ponieważ jest raczej zablokowany. Firebug mi pozwala, ale wszystko wydaje się dobre.

Dzięki za pomoc!

+0

Spróbuj 'asynchroniczny: FALSE i spróbować jeszcze raz. –

+0

To niestety nie miało efektu. Powinienem również wspomnieć, że stan oddzwaniania błędu jest zerowy. – checker

Odpowiedz

14

Dobra, oto poprawka! Wniosek został użyty przy użyciu window.XMLHttpRequest(), który z jakiegoś powodu nie działa prawidłowo w IE8. jQuery nie zawodzi z powrotem do window.ActiveXObject("Microsoft.XMLHTTP"), tak jak powinien.

Dodaj to do skryptu gdzieś przed wywołania AJAX (tylko zweryfikowane w IE8, a nie inny IE):

jQuery.ajaxSetup({ 
      xhr: function() { 
        //return new window.XMLHttpRequest(); 
        try{ 
         if(window.ActiveXObject) 
          return new window.ActiveXObject("Microsoft.XMLHTTP"); 
        } catch(e) { } 

        return new window.XMLHttpRequest(); 
       } 
     }); 

Oto jak doszedłem do rozwiązania:

  1. zaktualizowana jQuery 1.4 .4 w przypadku błędu, który został naprawiony.
  2. Przejść przez debugger Firebug i debugger DevTools, aż wyniki wydają się drastycznie różnić.
  3. W linii 5899 funkcja ajax() tworzy obiekt XmlHttpRequest z funkcją xhr(). W przeglądarce Firefox zwracano dobre dane. W IE, to był powrót z wszystkich pól jest Error: This method cannot be called until the open method has been called.
  4. analizowałem tę funkcję w linii 5749, return new window.XMLHttpRequest();
  5. google i natknąłem się na to page, który ma ten sam problem i zaproponował rozwiązanie, które działa na mnie.
  6. Official jQuery ticket: ustawienie
Powiązane problemy