l'analyse JSONP $http.jsonp() réponse en angular.js
Je suis en utilisant angulaire du $http.jsonp()
demande qui est avec succès le retour json enveloppé dans une fonction:
var url = "http://public-api.wordpress.com/rest/v1/sites/wtmpeachtest.wordpress.com/posts?callback=jsonp_callback";
$http.jsonp(url).
success(function(data, status, headers, config) {
//what do I do here?
}).
error(function(data, status, headers, config) {
$scope.error = true;
});
Comment accéder à/analyser la fonction renvoyée plastique-JSON?
- Avec JSONP vous n'avez pas "d'accès/analyser la fonction renvoyée plastique-JSON." Votre fonction de rappel est appelée, elle reçoit les données JSON comme argument.
- J'ai essayé de faire quelque chose comme
- (désolé appuyez sur entrée trop tôt ci-dessus) À quel point mon callback appelé? Un extrait de code serait vraiment utile. J'ai essayé un certain nombre de choses différentes à ce point et je suis perplexe.
- Le callback est appelé lorsque la réponse est de retour. Avez-vous une fonction nommée
jsonp_callback
? Si pas, c'est votre problème. - pour l'instant j'ai écrit une fonction simple il suffit de retourner le premier élément du json,
function jsonp_callback(data) { return data.found; //should be 3 }
- Pour les gens qui lisent cette question: découvrez la solution à ce problème qui a été publié juste APRÈS la accepté de répondre.
Vous devez vous connecter pour publier un commentaire.
Mise à JOUR: depuis Angulaire de 1,6
Vous devez maintenant définir la fonction de rappel de la sorte:
$http.jsonp('some/trusted/url', {jsonpCallbackParam: 'callback'})
Modifier/accès/déclarer param via
$http.defaults.jsonpCallbackParam
, par défaut,callback
Remarque: vous devez également Vous assurer que votre URL est ajoutée à la confiance/liste blanche:
$sceDelegateProvider.resourceUrlWhitelist
ou explicitement approuvé par:
$sce.trustAsResourceUrl(url)
success/error
ont été obsolète.UTILISATION:
Réponse Précédente: Angulaire 1.5.x et avant
Tout ce que vous devez avoir à faire est de changer
callback=jsonp_callback
àcallback=JSON_CALLBACK
comme suit:Et puis votre
.success
fonction feu comme vous l'avez si le retour a été un succès.Cette façon de faire vous permet d'éviter d'avoir à salir l'espace mondial. Ceci est documenté dans le AngularJS documentation ici.
Mis à jour Matt Boule de violon à utiliser cette méthode: http://jsfiddle.net/subhaze/a4Rc2/114/
Exemple complet:
Angular 1.6
exemple -success
est également déconseillé.. vous devriez utiliserthen
https
au lieu dehttp
pour votre API point de terminaison si elle prend en charge.https
starlord.hackerearth.com/... il est donc probablement l'habitude de travailler sur n'importe quel URLhttps
. J'ai aussi remarqué sur la non https côtéhttp://starlord.hackerearth.com/hackernews?callback=angular.callbacks._0
ce n'est pas de l'envoi de retour JSONP, c'est juste de l'envoi de retour JSONLa PLUS IMPORTANT je n'ai pas compris depuis un certain temps, c'est que la demande DOIT contenir "callback=JSON_CALLBACK", parce que AngularJS modifie l'url de la requête, à la substitution d'un identifiant unique pour "JSON_CALLBACK". La réponse du serveur doit utiliser la valeur de la 'callback' paramètre au lieu de codage en dur "JSON_CALLBACK":
Depuis que j'ai écrit mon propre serveur PHP script, je pensais que je savais ce que le nom de la fonction qu'il voulait et n'a pas besoin de passer de "callback=JSON_CALLBACK" dans la requête. Grosse erreur!
AngularJS remplace "JSON_CALLBACK" à la demande avec un unique nom de la fonction (comme le "callback=angulaire.les rappels._0"), et la réponse du serveur doit renvoyer cette valeur:
json
fichier.Cela a été très utile. Angulaire ne fonctionne pas exactement comme JQuery. Il a son propre jsonp() la méthode, ce qui exige, en effet, "&callback=JSON_CALLBACK" à la fin de la chaîne de requête. Voici un exemple:
Puis de les afficher ou de les manipuler {{ données }} dans votre Angulaire du modèle.
Cela devrait fonctionner très bien pour vous, tant que la fonction
jsonp_callback
est visible dans l'étendue globale:De démo: http://jsfiddle.net/mattball/a4Rc2/ (disclaimer: je n'ai jamais écrit une AngularJS code avant)
Vous devez encore définir
callback
dans les params:Où "functionName' est un stringified de référence à l'échelle mondiale fonction définie. Vous pouvez le définir à l'extérieur de votre angulaire script, puis de la redéfinir dans votre module.
Pour l'analyse de ce faire-
Ou vous pouvez utiliser
`$champ d'application.données=JSON.Stringify(données);
Angulaire de modèle vous pouvez l'utiliser comme
pour moi les solutions ci-dessus n'a fonctionné qu'une seule fois, j'ai ajouté "format=jsonp" pour les paramètres de la requête.
Je suis en utilisant angulaire 1.6.4 et de la réponse fournie par subhaze ne fonctionne pas pour moi. Je l'ai modifié un peu et puis il a travaillé - vous devez utiliser la valeur retournée par $sce.trustAsResourceUrl. Code complet: