2013-11-26 29 views
23

Obecnie pracuję nad aplikacją internetową opartą wyłącznie na HTML i JavaScript, która wykorzystuje CORS do korzystania ze zdalnej usługi WWW, ale obecnie ma problemy z IE 11, które wysyła żądanie GET. Zabawne jest to, że działa dobrze w IE8/9/10, a nie 11.Dziwny błąd AJAX z IE 11

Problem polega na tym, że IE 11 wydaje się czekać na odpowiedź z serwera. Wywołanie ajax jest po prostu:

$.ajax(url, { 
    dataType: 'json', 
    complete: complete, 
    type: 'GET', 
    global: true, 
    success: success, 
    crossDomain: true, 
    xhrFields: { 
     withCredentials: true 
    } 
}); 

W zakładce sieci i przy użyciu Skrzypka widzę, że IE nigdy nie wysyła żądania.

Czy ktoś ma jakieś pomysły, proszę?

EDIT: Zapomniałem wspomnieć, że już wypróbowałem pamięć podręczną: false. Znalazłem także coś bardzo dziwnego, jeśli przełączyłem tryb dokumentu w narzędziach programistycznych z Edge na 9, a następnie z powrotem połączenie zadzwoni za każdym razem, nawet po tym, jak wyczyściłem IE i zrestartowałem, czy pamięć podręczna jest prawdziwa czy fałszywa. Bardzo dziwne. : \

+0

Czy widzisz, czy IE11 ma problemy z żądaniem OPCJE przed lotem? Czy możesz zarejestrować żądanie OPTIONS na serwerze? – Halcyon

+0

debuguj go, sprawdzając, która opcja ajax daje problem –

+0

Nie wiem, czy to nadal jest problem, ale czy sprawdziłeś swoje IE [strefy bezpieczeństwa] (http: // stackoverflow.com/questions/3362474/jquery-ajax-fail-in-ie-on-over-over-domain-calls), aby umożliwić CORS? – rockerest

Odpowiedz

29

IE słynie z buforowania. Upewnij się, że nie otrzymujesz buforowanej odpowiedzi. Możesz ustawić wartość właściwości cache na false lub dodać unikalny znacznik czasu do adresu URL, aby nie była to buforowana odpowiedź. Możesz użyć metody $.now(), aby uzyskać unikalny znacznik czasu.

Ustawienie właściwości cache

$.ajax(url, { 
    dataType: 'json', 
    cache : false, 
    //Other things ... 
} 

Dodawanie unikalny znacznik czasu do URL

var url="somePage.php?"+$.now(); 
//Use this url now for making the ajax call 

Metoda $.now() jest skrótem liczby zwracanych przez wyrażenie (new Date).getTime()

+0

Dziękuję za odpowiedź. Próbowałem dodać znacznik czasu, ale to nie robi różnicy. – Daveo

+0

@Daveo: Czy otrzymujesz błędy w skrypcie? Użyj firebuga, aby zobaczyć, co się stanie. – Shyju

+0

Najprawdopodobniej powinien pojawić się znak zapytania przed '$ .now()', w przeciwnym razie url się zepsuje. – qwerty

5

nie jestem pewien, może to buforowanie, spróbuj ustawić właściwość „cache: false”

inaczej, można również spróbować dodać datetime na końcu adresu URL, więc trzeba za każdym inny adres URL i IE nie przechowują w pamięci podręcznej

url +""+ (new Date()).getTime() 
2

Jeśli używasz lokalnego, spróbuj przełączanie crossDomain na false. Spędziłem na tym sporo czasu. Chrome obsłużył CrossDomain, ale w IE, jeśli nie korzystasz z crossDomain i masz ustawione na true, to po cichu zawiedzie.

3

Wykorzystuje to w swoim w głowicy tagu

<meta http-equiv="X-UA-Compatible" content="IE=9,chrome=1"> 
2

Znam ten wątek jest stary, ale tylko jako dodatkowe odprawy dla tych, którzy napotykają ten problem, sprawdź, czy Twoje zaufane ustawienia Miejsca Strefa umożliwienia dostępu między domenami. Pierwsze ustawienie w "Różne" jest ustawieniem, które chcesz.

Ustaw "Dostęp do źródeł danych w domenach" na "Włącz".