Quelqu'un pourrait-il m'aider à trouver comment démarrer avec JSONP?
Code:
$('document').ready(function() {
var pm_url = 'http://twitter.com/status';
pm_url += '/user_timeline/stephenfry.json';
pm_url += '?count=10&callback=photos';
var photos = function (data) {
alert(data);
};
$.ajax({
url: pm_url,
dataType: 'jsonp',
jsonpCallback: 'photos',
jsonp: false,
});
});
Violon: http://jsfiddle.net/R7EPt/6/
Devrait produire une alerte, pour autant que je sache à partir de la documentation: n'est pas (mais ne produit aucune erreur non plus).
Merci.
Réponses:
JSONP est vraiment une astuce simple pour surmonter la même politique de domaine XMLHttpRequest . (Comme vous le savez, on ne peut pas envoyer de requête AJAX (XMLHttpRequest) à un domaine différent.)
Donc, au lieu d'utiliser XMLHttpRequest, nous devons utiliser des balises HTMLl de script , celles que vous utilisez habituellement pour charger des fichiers JS, afin que JS obtienne des données d'un autre domaine. Cela semble bizarre?
La chose est - il s'avère que les balises de script peuvent être utilisées d'une manière similaire à XMLHttpRequest ! Regarde ça:
Vous vous retrouverez avec un segment de script qui ressemble à ceci après avoir chargé les données:
Cependant, c'est un peu gênant, car nous devons récupérer ce tableau à partir de la balise de script . Alors JSONP créateurs ont décidé que cela fonctionnera mieux (et il est):
Remarquez la fonction my_callback là-bas? Ainsi, lorsque le serveur JSONP reçoit votre demande et trouve le paramètre de rappel - au lieu de renvoyer un tableau JS brut, il renvoie ceci:
Voyez où est le profit: maintenant nous obtenons un rappel automatique ( my_callback ) qui sera déclenché une fois que nous aurons obtenu les données. C'est tout ce qu'il y a à savoir sur JSONP : c'est un rappel et des balises de script.
REMARQUE:
ce sont des exemples simples d'utilisation de JSONP, ce ne sont pas des scripts prêts pour la production.
Démonstration RAW JavaScript (simple flux Twitter utilisant JSONP):
Exemple jQuery de base (flux Twitter simple utilisant JSONP):
JSONP signifie JSON with Padding . (technique très mal nommée car elle n'a vraiment rien à voir avec ce que la plupart des gens pourraient considérer comme un «rembourrage».)
la source
Access-Control-Allow-Origin
têtes qui permettent d'effectuer des appels Ajax réguliers vers certains domaines d'origine croisée.Il existe un moyen encore plus simple de travailler avec JSONP en utilisant jQuery
Le
?
à la fin de l'URL indique à jQuery qu'il s'agit d'une requête JSONP au lieu de JSON. jQuery enregistre et appelle la fonction de rappel automatiquement.Pour plus de détails, reportez-vous à la documentation jQuery.getJSON .
la source
&callback=?
car ce n'est pas le premier paramètre dans votre cas.En réponse à l'OP, il y a deux problèmes avec votre code: vous devez définir jsonp = 'callback', et l'ajout d'une fonction de rappel dans une variable comme vous ne semblez pas fonctionner.
Mise à jour: quand j'ai écrit cela, l'API Twitter était juste ouverte, mais ils l'ont changée et elle nécessite maintenant une authentification. J'ai changé le deuxième exemple en un exemple fonctionnel (2014Q1), mais en utilisant maintenant github.
Cela ne fonctionne plus - comme un exercice, voyez si vous pouvez le remplacer par l'API Github:
bien qu'alerter () un tableau comme celui-là ne fonctionne pas vraiment bien ... L'onglet "Net" de Firebug vous montrera correctement le JSON. Une autre astuce pratique consiste à faire
Vous pouvez également utiliser la méthode jQuery.getJSON . Voici un exemple html complet qui obtient une liste de "gists" de github. De cette façon, il crée une fonction de rappel nommée aléatoirement pour vous, c'est le dernier "callback =?" dans l'url.
la source
Le code ci-dessus aide à obtenir des images de l'API Flicker. Cela utilise la méthode GET pour obtenir des images à l'aide de JSONP. Il peut être trouvé en détail ici
la source