<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.js" type="text/javascript"></script>
<script>
$.get("http://example.com/", function(data) {
alert(data);
});
</script>
il fait une requête OPTIONS à cette URL, puis le rappel n'est jamais appelé avec quoi que ce soit.
Quand ce n'est pas du domaine croisé, cela fonctionne très bien.
JQuery ne devrait-il pas simplement passer l'appel avec un <script>
nœud, puis faire le rappel lorsqu'il est chargé? Je comprends que je ne pourrai pas obtenir le résultat (car il s'agit d'un domaine croisé), mais c'est OK; Je veux juste que l'appel passe. Est-ce un bug ou est-ce que je fais quelque chose de mal?
jquery
xmlhttprequest
http-get
http-options-method
Paul Tarjan
la source
la source
Réponses:
Selon MDN ,
la source
Les OPTIONS proviennent de http://www.w3.org/TR/cors/ Voir http://metajack.im/2010/01/19/crossdomain-ajax-for-xmpp-http-binding-made-easy/ pour un peu plus d'infos
la source
Si vous essayez de POSTER
Assurez-vous de
JSON.stringify
vos données de formulaire et envoyez en tant quetext/plain
.la source
Je ne pense pas que jQuery fera naturellement une requête JSONP quand on lui donnera une URL comme ça. Il fera cependant une requête JSONP lorsque vous lui direz quel argument utiliser pour un rappel:
Il appartient entièrement au script récepteur d'utiliser cet argument (qui ne doit pas être appelé "jsoncallback"), dans ce cas, la fonction ne sera jamais appelée. Mais, puisque vous avez déclaré que vous vouliez simplement que le script sur metaward.com s'exécute, cela suffirait.
la source
En fait, les demandes AJAX inter-domaines (XMLHttp) ne sont pas autorisées pour des raisons de sécurité (pensez à récupérer une page Web "restreinte" du côté client et à la renvoyer au serveur - ce serait un problème de sécurité).
La seule solution de contournement sont les rappels. C'est-à-dire: créer un nouvel objet de script et pointer le src vers le JavaScript de fin, qui est un rappel avec des valeurs JSON (myFunction ({data}), myFunction est une fonction qui fait quelque chose avec les données (par exemple, les stocker dans une variable).
la source
Changez simplement "application / json" en "text / plain" et n'oubliez pas le JSON.stringify (demande):
la source
J'ai eu le même problème. Mon correctif a été d'ajouter des en-têtes à mon script PHP qui ne sont présents que dans un environnement de développement.
Cela permet des demandes interdomaines:
Cela indique à la demande de contrôle en amont que le client peut envoyer les en-têtes qu'il souhaite:
De cette façon, il n'est pas nécessaire de modifier la demande.
Si vous avez des données sensibles dans votre base de données de développement qui pourraient potentiellement être divulguées, vous pourriez y réfléchir à deux fois.
la source
Dans mon cas, le problème n'était pas lié à CORS puisque j'émettais un POST jQuery au même serveur Web. Les données étaient JSON mais j'avais omis le paramètre dataType: 'json'.
Je n'ai pas (ni ajouté) un paramètre contentType comme indiqué dans la réponse de David Lopes ci-dessus.
la source
Il semble que Firefox et Opera (testés sur mac également) n'aiment pas le caractère interdomaine de cela (mais Safari est très bien avec ça).
Vous devrez peut-être appeler un code côté serveur local pour boucler la page distante.
la source
J'ai pu le réparer à l'aide des en-têtes suivants
Si vous êtes sur Nodejs, voici le code que vous pouvez copier / coller.
la source