Das Folgende funktioniert in allen Browsern außer IE (ich teste in IE 9).
jQuery.support.cors = true;
...
$.ajax(
url + "messages/postMessageReadByPersonEmail",
{
crossDomain: true,
data: {
messageId : messageId,
personEmail : personEmail
},
success: function() {
alert('marked as read');
},
error: function(a,b,c) {
alert('failed');
},
type: 'post'
}
);
Ich habe eine andere Funktion, die verwendet dataType: 'jsonp'
, aber ich brauche keine Daten, die bei diesem AJAX-Aufruf zurückgegeben werden. Mein letzter Ausweg wird sein, etwas in JSONP eingewickeltes Jibberish zurückzugeben, damit es funktioniert.
Irgendwelche Ideen, warum der IE eine CORS-Anfrage vermasselt, die keine Daten zurückgibt?
jquery
internet-explorer-9
cross-domain
jsonp
cors
Garrett
quelle
quelle
Antworten:
Dies ist ein bekannter Fehler bei jQuery. Das jQuery-Team hat "keine Pläne, dies im Kern zu unterstützen und eignet sich besser als Plugin". (Siehe diesen Kommentar ). IE ist nicht die Verwendung von XMLHttpRequest , sondern ein alternativen Objekt namens XDomainRequest .
Es ist ein Plugin zur Verfügung dies in jQuery zu unterstützen, die hier gefunden werden kann : https://github.com/jaubourg/ajaxHooks/blob/master/src/xdr.js
BEARBEITEN Die Funktion
$.ajaxTransport
registriert eine Transporterfabrik. Ein Transporter verwendet intern durch$.ajax
Anfragen durchzuführen. Daher gehe ich davon aus , dass Sie$.ajax
wie gewohnt anrufen können sollten . Informationen zu Transportern und Erweiterungen$.ajax
finden Sie hier .Eine vielleicht bessere Version dieses Plugins finden Sie hier .
Zwei weitere Anmerkungen:
Bearbeiten 2: http zu https Problem
Quelle: http://blogs.msdn.com/b/ieinternals/archive/2010/05/13/xdomainrequest-restrictions-limitations-and-workarounds.aspx
quelle
http
bishttps
), Domänen (google.com
bisbing.com
), Subdomänen (mail.google.com
bismaps.google.com
) oder Protokollen (google.com:80
- der Standardport bisgoogle.com:8080
) löst eine domänenübergreifende Anforderung aus. Grundsätzlich muss alles vor dem ersten/
in Ihrer URL identisch sein.Aufbauend auf der akzeptierten Antwort von @dennisg habe ich dies erfolgreich mit jQuery.XDomainRequest.js von MoonScript erreicht.
Der folgende Code funktionierte in Chrome, Firefox und IE10 ordnungsgemäß, schlug jedoch in IE9 fehl. Ich habe das Skript einfach eingefügt und es funktioniert jetzt automatisch in IE9. (Und wahrscheinlich 8, aber ich habe es nicht getestet.)
quelle
Vollständige Anweisungen dazu mit dem Plugin "jQuery-ajaxTransport-XDomainRequest" finden Sie hier: https://github.com/MoonScript/jQuery-ajaxTransport-XDomainRequest#instructions
Dieses Plugin wird aktiv unterstützt und verarbeitet HTML, JSON und XML. Die Datei wird auch auf CDNJS gehostet, sodass Sie das Skript ohne zusätzliche Einrichtung direkt auf Ihrer Seite ablegen können: http://cdnjs.cloudflare.com/ajax/libs/jquery-ajaxtransport-xdomainrequest/1.0.1/jquery.xdomainrequest .min.js
quelle
Das Problem ist, dass IE9 und niedriger CORS nicht unterstützen. XDomainRequest unterstützt nur GET / POST und den
text/plain
Inhaltstyp, wie hier beschrieben: http://blogs.msdn.com/b/ieinternals/archive/2010/05/13/xdomainrequest-restrictions-limitations-and-workarounds.aspxWenn Sie also alle HTTP-Verben und / oder JSON usw. verwenden möchten, müssen Sie eine andere Lösung verwenden. Ich habe einen Proxy geschrieben, der ordnungsgemäß auf Proxy heruntergestuft wird, wenn IE9 oder weniger verwendet wird. Sie müssen Ihren Code überhaupt nicht ändern, wenn Sie ASP.NET verwenden.
Die Lösung besteht aus zwei Teilen. Das erste ist ein jquery-Skript, das sich in die jQuery-Ajax-Verarbeitung einfügt. Der Webserver wird automatisch aufgerufen, wenn eine CrossDomain-Anfrage gestellt wird und der Browser IE ist:
Auf Ihrem Webserver müssen Sie die Anforderung empfangen, den Wert aus dem X-CorsProxy-Url-HTTP-Header abrufen, eine HTTP-Anforderung ausführen und schließlich das Ergebnis zurückgeben.
Mein Blog-Beitrag: http://blog.gauffin.org/2014/04/how-to-use-cors-requests-in-internet-explorer-9-and-below/
quelle
Ich habe gerade alle Anfragen an JSONP gestellt, da dies die einzige Lösung für alle von uns unterstützten Browser (IE7 + und die regulären Browser) war. Wohlgemerkt, Ihre Antwort funktioniert technisch für IE9, sodass Sie die richtige Antwort haben.
quelle
Aufbauend auf der Lösung von MoonScript können Sie stattdessen Folgendes versuchen:
https://github.com/intuit/xhr-xdr-adapter/blob/master/src/xhr-xdr-adapter.js
Der Vorteil ist, dass CORS (soweit möglich) auf IE 8/9 mit anderen Frameworks (nicht nur mit jQuery) aktiviert wird, da es sich um eine Lösung auf niedrigerer Ebene handelt. Ich hatte Erfolg mit AngularJS sowie mit jQuery 1.x und 2.x.
quelle
Abrufen eines domänenübergreifenden JSON mit jQuery in Internet Explorer 8 und neueren Versionen
Sehr nützlicher Link:
http://graphicmaniacs.com/note/getting-a-cross-domain-json-with-jquery-in-internet-explorer-8-and-later/
Kann bei der Rückgabe von json von einer X-Domain-Anfrage helfen.
Hoffe das hilft jemandem.
quelle
Um dieses Problem zu lösen, überprüfen Sie auch, ob Sie einige .js in Ihre Ajax-Datei aufgenommen haben, die heißt: Ich habe den Fehler Zugriff verweigert erhalten, während ich shadowbox.js in meine ajax.php aufgenommen habe
quelle
Ich habe einen CORS-Webdienst auf meinem Entwicklungscomputer getestet und nur im IE die Fehlermeldung "Zugriff verweigert" erhalten. Firefox und Chrome haben gut funktioniert. Es stellt sich heraus, dass dies durch meine Verwendung von localhost im Ajax-Aufruf verursacht wurde! Meine Browser-URL war also ungefähr so:
http: //my_computer.my_domain.local/CORS_Service/test.html
und mein Ajax-Aufruf in test.html war ungefähr so:
Alles hat funktioniert, als ich den Ajax-Aufruf geändert habe, um meine Computer-IP anstelle von localhost zu verwenden.
Auf der Registerkarte "Netzwerk" des IE-Dev-Tools-Fensters wird auch die CORS Preflight OPTIONS-Anforderung angezeigt, gefolgt von XMLHttpRequest GET, genau das, was ich erwartet hatte.
quelle
Update ab Anfang 2015. xDomain ist eine weit verbreitete Bibliothek zur Unterstützung von CORS auf IE9 mit begrenzter zusätzlicher Codierung.
https://github.com/jpillora/xdomain
quelle
Versuchen Sie, das jQuery-Plugin jquery-transport-xdr für CORS-Anforderungen in IE8 / 9 zu verwenden.
quelle
Hinweis - Hinweis
Verwenden Sie nicht " http://www.domain.xxx " oder " http: // localhost / " oder "IP >> 127.0.0.1" für URL in Ajax. Verwenden Sie nur Pfad (Verzeichnis) und Seitennamen ohne Adresse.
falscher Zustand:
wahrer Zustand:
quelle