Question

J'ai essayé d'écrire un script dans lequel je peux publier des données sur une page qui se trouve sur un domaine différent de celui de la page source. J'ai tout lu sur les problèmes liés à cela, et les informations m'ont conduit à la fonction jQuery.getJSON, mais je ne sais pas si cela fonctionnera.

Voici mon scénario:

J'ai une poignée de variables javascript (pour cet exemple, utilisons simplement c1, c2, c3, c4 et c5). Donc, je veux envoyer les valeurs de ces 5 variables à un script sur un autre domaine.

Je comprends comment je ferais cela en utilisant quelque chose comme $ .get () ou $ .post () - je ferais quelque chose de similaire à ceci:

$.post("myscript.php", { c1:c1, c2:c2, c3:c3, c4:c4, c5:c5 } );

Je ne sais pas (1) si le getJSON m'amènera là où j'ai besoin, et (2) si OUI, quelle différence il y a dans l'appel jQuery pour la fonction getJSON (vs la fonction .post), ainsi que si il y a quelque chose de différent que je dois faire du côté du serveur (pour mes besoins, je voudrais simplement afficher les valeurs visuellement pour le moment).

MODIFIER: En lisant les réponses, j'ai peut-être besoin de clarifier. Ce que je recherche, c'est un moyen (si possible) d'envoyer des données d'une page à une autre page sur un domaine différent. Je comprends les problèmes de sécurité, donc si ce n'est pas possible, ça craint mais je comprends. Mais s'il existe un moyen d'utiliser jQuery, c'est ce que je recherche (et un petit exemple utilisant mes variables c1 - c5). Merci.

Était-ce utile?

La solution

Bien entendu, vous pouvez envoyer des données à un autre serveur (cross domain) en utilisant $.getJSON() en mode JSONP. C'est juste que vos données doivent faire partie de la chaîne de requête et que vous êtes limité dans la quantité de données que vous pouvez envoyer car vous ne pouvez pas avoir de chaînes de requête infiniment longues. Il n'y aura aucun changement dans la façon dont vous traitez les données côté serveur, puisque la requête apparaîtra comme un GET HTTP normal avec params.

Voici un exemple tiré de la documentation de l'API jQuery. Cela extrait les 4 photos de chiens les plus récentes de l'API JSON Flickr.

Démo de travail

var c1 = "dog";
var c2 = "any";

$.getJSON("http://api.flickr.com/services/feeds/photos_public.gne?jsoncallback=?", {
    tags: c1,
    tagmode: c2,
    format: "json"
}, function(data) {
    $.each(data.items, function(i, item) {
        $("<img/>").attr("src", item.media.m).appendTo("#images");
        if (i == 3) return false;
    });
});

Remarquez comment c1 et c2 sont passés en tant que paramètres GET. Le paramètre jsoncallback=? indique à jQuery de faire la requête en tant que requête JSONP et est obligatoire lors des appels inter-domaines.

Voici à quoi pourrait ressembler votre script:

var orderId = 1337;
var customer = encodeURIComponent("John Doe");
var amount = 420;

$.getJSON("http://www.otherserver?jsoncallback=?", {
    oId: orderId,
    cust: customer,
    amnt: amount
},

function(data) {
    //process response if any
});

Exemple de requête HTTP générée:

http://www.otherserver/?jsoncallback=jQuery16305821700256783515_1315685969538&oId=1337&cust=John%2520Doe&amnt=420&_=1315685969636

HTH.

Autres conseils

Pas si vous avez besoin de publier un message.Le nom est assez descriptif ici: get ... json.C'est une requête get avec traitement d'un retour json.Il semble cependant que ce qui vous intéresse vraiment, c'est l'envoi du json, et vous n'avez besoin de rien de spécial pour cela.

Cependant, si votre confusion est liée à l'absence de fonction postjson dans jquery, cela peut aider http://abeautifulsite.net/blog/2008/05/postjson-for-jquery/

La méthode

.post () enverra les données sous forme de requête de publication http.Ici, il trouvera automatiquement le type de données des données que vous envoyez (json ou xml ou etc.). tandis que .getJSON () enverra l'envoi des données en tant que http get request et ici le type de données des données est spécifié par JSON.

Il semble que getJSON() ne servirait à rien parce que nous ne spécifions pas de gestionnaire pour travailler avec le résultat.getJSON est utile si vous savez que le type de données renvoyé par la requête est JSON.

Vous ne pouvez pas passer d'appels AJAX vers un autre domaine en raison du SOP (Same Origin Policy).

Vous pouvez le faire avec un POST de forme normale, mais cela forcera le navigateur à traiter la réponse (afficher une nouvelle page HTML, ou effectuer une redirection, etc ...).

getJSON est un appel GET, peut envoyer des paires clé valeur sous forme d'URL de chaînes de requête.$ .post est un appel POST, peut envoyer des données en tant que charge utile, ainsi que des paires valeur / clé en tant que chaîne de requête dans l'URL.getJSON est comme $ .get (url, handler, 'json'), s'assure simplement que le retour est des données json.

Vous pouvez cependant envoyer une requête GET à différents domaines, en utilisant quelque chose d'aussi simple que de créer dynamiquement une balise IMG.

Ou vous pouvez utiliser JSONP, mais il doit s'agir d'un appel GET si vous souhaitez conserver le contexte actuel.

Acclamations.

Euh, de la documentation de l'API à http://api.jquery.com/jQuery.getJSON/:

"Description: chargez les données codées JSON à partir du serveur à l'aide d'un GET HTTP demande. "

La réponse courte est "non".

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top