Ich arbeite derzeit an einer rein HTML- und JavaScript-gesteuerten Web-App, die CORS zum Konsumieren eines Remote-Webdienstes verwendet, aber derzeit Probleme mit IE 11 hat, eine GET-Anfrage zu stellen. Das Lustige ist, dass es in IE8 / 9/10 gut funktioniert, nur nicht in 11.

Das Problem ist, dass IE 11 eine Zeitüberschreitung aufweist und nicht auf eine Antwort vom Server wartet. Der Ajax-Aufruf lautet einfach:

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

Auf der Registerkarte "Netzwerk" und mit Fiddler kann ich sehen, dass der IE die Anfrage niemals sendet.

Hat jemand bitte irgendwelche Ideen?

BEARBEITEN : Ich habe vergessen zu erwähnen, dass ich Cache bereits ausprobiert habe: false. Ich habe auch etwas sehr Seltsames gefunden: Wenn ich den Dokumentmodus in den Entwicklungstools von Edge auf 9 wechsle, funktioniert der Aufruf jedes Mal wieder, selbst nachdem ich den IE gelöscht und neu gestartet habe, unabhängig davon, ob der Cache wahr oder falsch ist. Sehr bizarr. : \

24
Daveo 26 Nov. 2013 im 18:19

5 Antworten

Beste Antwort

IE ist berühmt für Caching. Stellen Sie sicher, dass Sie keine zwischengespeicherte Antwort erhalten. Sie können entweder den Eigenschaftswert cache auf false setzen oder der URL einen eindeutigen Zeitstempel hinzufügen, damit es sich nicht um eine zwischengespeicherte Antwort handelt. Sie können die $.now() Methode verwenden, um einen eindeutigen Zeitstempel zu erhalten.

Festlegen der Cache-Eigenschaft

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

Hinzufügen eines eindeutigen Zeitstempels zur URL

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

Die Methode $.now() ist eine Abkürzung für die vom Ausdruck (new Date).getTime() zurückgegebene Zahl.

34
Shyju 27 Nov. 2013 im 14:55

Wenn Sie lokal ausführen, versuchen Sie, crossDomain auf false zu setzen. Ich habe ziemlich viel Zeit damit verbracht. Chrome hat die crossDomain behandelt, aber wenn Sie im IE nicht crossDomain verwenden und diese auf true gesetzt haben, schlägt dies stillschweigend fehl.

2
DeadlyChambers 26 Nov. 2013 im 16:10

Ich bin nicht sicher, vielleicht ist es Caching. Versuchen Sie, die Eigenschaft "cache: false" festzulegen.

Andernfalls können Sie auch versuchen, eine Datums- / Uhrzeitangabe am Ende Ihrer URL hinzuzufügen, sodass Sie jedes Mal eine andere URL haben und der IE nicht zwischengespeichert wird

url +""+ (new Date()).getTime()
5
Black Ops 26 Nov. 2013 im 14:30

Ich weiß, dass dieser Thread alt ist, aber als zusätzliche Überprüfung für diejenigen, bei denen dieses Problem auftritt, überprüfen Sie, ob Ihre Zoneneinstellungen für vertrauenswürdige Sites den Zugriff über Domänen hinweg ermöglichen. Die erste Einstellung unter "Verschiedenes" ist die gewünschte Einstellung.

Setzen Sie "Zugriff auf domänenübergreifende Datenquellen" auf "Aktivieren".

2
Peter C 11 Jän. 2018 im 11:54

Verwendet dies in Ihrem In-Head-Tag

<meta http-equiv="X-UA-Compatible" content="IE=9,chrome=1">
4
SarwarCSE 6 Aug. 2015 im 10:54