Ce qui suit fonctionne dans tous les navigateurs sauf IE (je teste dans 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'
}
);
J'ai une autre fonction qui utilise dataType: 'jsonp'
, mais je n'ai besoin d'aucune donnée renvoyée sur cet appel AJAX. Mon dernier recours sera de renvoyer du jibberish enveloppé dans JSONP juste pour le faire fonctionner.
Des idées pour lesquelles IE se trompe avec une requête CORS qui ne renvoie aucune donnée?
Réponses:
Il s'agit d'un bogue connu avec jQuery. L'équipe jQuery n'a "pas l'intention de prendre en charge cela dans le noyau et est mieux adaptée en tant que plugin." (Voir ce commentaire ). IE ne pas utiliser le XMLHttpRequest , mais un objet autre nom XDomainRequest .
Il existe un plugin disponible pour prendre en charge cela dans jQuery, qui peut être trouvé ici : https://github.com/jaubourg/ajaxHooks/blob/master/src/xdr.js
EDIT La fonction
$.ajaxTransport
enregistre une usine de transport. Un transporteur est utilisé en interne par$.ajax
pour effectuer des demandes. Par conséquent, je suppose que vous devriez pouvoir appeler$.ajax
comme d'habitude. Vous$.ajax
trouverez ici des informations sur les transporteurs et l'extension .En outre, une version peut-être meilleure de ce plugin peut être trouvée ici .
Deux autres remarques:
Edit 2: problème http vers https
Source: http://blogs.msdn.com/b/ieinternals/archive/2010/05/13/xdomainrequest-restrictions-limitations-and-workarounds.aspx
la source
http
vershttps
), les domaines (google.com
versbing.com
), les sous-domaines (mail.google.com
versmaps.google.com
) ou les protocoles (google.com:80
- le port par défaut versgoogle.com:8080
) déclenchera tous une requête "interdomaine". Fondamentalement, tout ce qui précède le premier/
dans votre URL doit être identique.En me basant sur la réponse acceptée par @dennisg, j'ai réussi cela en utilisant jQuery.XDomainRequest.js par MoonScript.
Le code suivant a fonctionné correctement dans Chrome, Firefox et IE10, mais a échoué dans IE9. J'ai simplement inclus le script et il fonctionne maintenant automatiquement dans IE9. (Et probablement 8, mais je ne l'ai pas testé.)
la source
Des instructions complètes sur la façon de procéder à l'aide du plugin "jQuery-ajaxTransport-XDomainRequest" peuvent être trouvées ici: https://github.com/MoonScript/jQuery-ajaxTransport-XDomainRequest#instructions
Ce plugin est activement pris en charge et gère HTML, JSON et XML. Le fichier est également hébergé sur CDNJS, vous pouvez donc déposer directement le script dans votre page sans configuration supplémentaire: http://cdnjs.cloudflare.com/ajax/libs/jquery-ajaxtransport-xdomainrequest/1.0.1/jquery.xdomainrequest .min.js
la source
Le problème est que IE9 et les versions antérieures ne prennent pas en charge CORS. XDomainRequest ne prend en charge que GET / POST et le
text/plain
type conten comme décrit ici: http://blogs.msdn.com/b/ieinternals/archive/2010/05/13/xdomainrequest-restrictions-limitations-and-workarounds.aspxDonc, si vous souhaitez utiliser tous les verbes HTTP et / ou json, etc., vous devez utiliser une autre solution. J'ai écrit un proxy qui rétrogradera gracieusement vers le proxy si IE9 ou moins est utilisé. Vous n'avez pas du tout à modifier votre code si vous utilisez ASP.NET.
La solution est en deux parties. Le premier est un script jquery qui se connecte au traitement jQuery ajax. Il appellera automatiquement le serveur Web si une requête crossDomain est effectuée et que le navigateur est IE:
Dans votre serveur Web, vous devez recevoir la requête, obtenir la valeur de l'en-tête http X-CorsProxy-Url et faire une requête HTTP et enfin renvoyer le résultat.
Mon article de blog: http://blog.gauffin.org/2014/04/how-to-use-cors-requests-in-internet-explorer-9-and-below/
la source
Je viens de faire toutes les requêtes JSONP car c'était la seule solution pour tous nos navigateurs supportés (IE7 + et les habitués). Remarquez que votre réponse fonctionne techniquement pour IE9, vous avez donc la bonne réponse.
la source
En vous basant sur la solution de MoonScript, vous pouvez essayer ceci à la place:
https://github.com/intuit/xhr-xdr-adapter/blob/master/src/xhr-xdr-adapter.js
L'avantage est que puisqu'il s'agit d'une solution de niveau inférieur, elle activera CORS (dans la mesure du possible) sur IE 8/9 avec d'autres frameworks, pas seulement avec jQuery. Je l'ai utilisé avec succès avec AngularJS, ainsi qu'avec jQuery 1.x et 2.x.
la source
Obtenir un JSON inter-domaine avec jQuery dans Internet Explorer 8 et les versions plus récentes
Lien très utile:
http://graphicmaniacs.com/note/getting-a-cross-domain-json-with-jquery-in-internet-explorer-8-and-later/
Peut aider à résoudre le problème du retour de json à partir d'une demande de domaine X.
J'espère que cela aide quelqu'un.
la source
Pour résoudre ce problème, vérifiez également si vous avez inclus des .js dans votre fichier ajax appelé: J'ai reçu une erreur d'accès refusé en incluant shadowbox.js dans mon ajax.php
la source
J'étais en train de tester un service Web CORS sur ma machine de développement et recevais le message d'erreur "Accès refusé" uniquement dans IE. Firefox et Chrome ont bien fonctionné. Il s'avère que cela a été causé par mon utilisation de localhost dans l'appel ajax! Donc, l'URL de mon navigateur était quelque chose comme:
http: //my_computer.my_domain.local/CORS_Service/test.html
et mon appel ajax à l'intérieur de test.html ressemblait à quelque chose comme:
Tout a fonctionné une fois que j'ai changé l'appel ajax pour utiliser l'adresse IP de mon ordinateur au lieu de localhost.
L'onglet "Réseau" de la fenêtre des outils de développement IE affiche également la requête OPTIONS de contrôle en amont CORS suivie de XMLHttpRequest GET, ce que je m'attendais à voir.
la source
Mise à jour début 2015. xDomain est une bibliothèque largement utilisée pour prendre en charge CORS sur IE9 avec un codage supplémentaire limité.
https://github.com/jpillora/xdomain
la source
Essayez d'utiliser le plugin jQuery jquery-transport-xdr pour les requêtes CORS dans IE8 / 9.
la source
Remarque - Remarque
n'utilisez pas " http://www.domain.xxx " ou " http: // localhost / " ou "IP >> 127.0.0.1" pour l'URL en ajax. utilisez uniquement le chemin (répertoire) et le nom de la page sans adresse.
faux état:
état vrai:
la source