Comment puis-je créer un JSONP à partir d'un flux JSON externe?

J'ai deux domaines: www.domain1.com et www.domain2.com

J'ai un flux JSON simple sur domain1.

Je souhaite tirer le flux JSON de domain1 et le mettre sur un module sur domain2.

D'après ce que j'ai lu, la façon d'y aller est en utilisant JSONP, mais comment faites-vous cela? Existe-t-il un moyen de le faire avec JQuery / javascript? Ou devrais-je utiliser le code côté serveur (j'utilise Coldfusion). Aussi, je pourrais simplement utiliser .getJSON et non .ajax (je suis un débutant alors je n'ai jamais utilisé .ajax pour le moment)

EDIT OK Je suis encore confus. L'ajout de rappels à la fin de l'url l'a cassé. Comment puis-je le faire de sorte que, au lieu d'un chemin distant pour un flux, je tire un chemin absolu où ce code est sur www.domain2.com, mais le flux est sur www.domain1.com?

var feed ="/event/json.tag/tag/sports/"; $.getJSON(feed,function(data) { $.each(data.items, function(i,obj) { do something here... } } 

JSONP est juste une fonction de rappel enroulée autour d'un objet JSON. La convention générale consiste à avoir un point final qui renvoie JSON, sauf si un paramètre de rappel est défini sur la demande et renvoie JSONP dans ce cas.

C'est-à-dire http://www.domain1.com/api/getStuff pourrait revenir:

 {'foo': 'bar', 'fizz': 'buzz'} 

Alors http://www.domain1.com/api/getStuff?cb=cb123 devrait retourner:

 cb123({'foo': 'bar', 'fizz': 'buzz'}); 

Je ne connais pas ColdFusion, mais je suppose que cet exemple est bon: http://www.coldfusionjedi.com/index.cfm/2009/3/11/Writing-a-JSONP-service-in-ColdFusion

Il n'y a pas de solution client uniquement si quelqu'un d'autre a déjà construit un support JSONP dans le serveur avec lequel vous travaillez …

La lecture de jQuery Documentation $.ajax et $.getJSON sera un bon début, de toute façon, il existe de nombreux bons tutoriels sur jsonp, celui- ci par exemple est un excellent tutoriel:

 $.getJSON("http://api.oscar.aol.com/presence/get?k=key&f=json&t=aimuser&c=?", function(result){ if (result.response.data.users[0].state == 'online') { $("#status").css("background-image", "url('online.jpg')"); } } ); 

Comme mentionné sur le site:

Le paramètre f indique au service quel format renvoyer les résultats dans – JSON dans notre cas. Le paramètre c spécifie le rappel JSON à utiliser – c'est important!

Et dans la documentation jQuery:

Si l'URL inclut la chaîne "callback =?" (Ou similaire, tel que défini par l'API côté serveur), la requête est traitée comme JSONP à la place.

Alors, n'oubliez pas d'envoyer un rappel et de gérer les données après les mots seront faciles.

EDIT: un autre bon exemple .

EDIT2:
Lorsque vous ne spécifiez pas la valeur de rappel, jQuery l'affectera à vous (à partir de la page $ .getJSON), l'URL de Flickr deviendra:

http://api.flickr.com/services/feeds/photos_public.gne ? Jsoncallback = jsonp1294786450519 & tags = cat & tagmode = any & format = json

Et la réponse:

 jsonp1294786450519({ "title": "Recent Uploads tagged cat", "link": "http://www.flickr.com/photos/tags/cat/", "description": "", "modified": "2011-01-11T22:47:12Z", "generator": "http://www.flickr.com/", "items": [ { .... rest of json 

Donc, vous devez envelopper votre json avec le rappel envoyé depuis domain1

Vous pouvez récupérer le «flux» de JSON à partir de domain1 et passer ces données en tant que paramètre à votre propre fonction Javascript (sur domain2) lorsque votre demande est terminée (onComplete / onSuccess).