J'utilise la $http.jsonp()
requête d'angular qui renvoie avec succès 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 le JSON-wrapped-function retourné?
javascript
angularjs
jsonp
akronymn
la source
la source
jsonp_callback
? Sinon, c'est votre problème.function jsonp_callback(data) { return data.found; //should be 3 }
Réponses:
MISE À JOUR: depuis Angular 1.6
Vous devez maintenant définir le rappel comme ceci:
$http.jsonp('some/trusted/url', {jsonpCallbackParam: 'callback'})
Changer / accéder / déclarer le paramètre via
$http.defaults.jsonpCallbackParam
, la valeur par défaut estcallback
Remarque: vous devez également vous assurer que votre URL est ajoutée à la liste approuvée / blanche:
$sceDelegateProvider.resourceUrlWhitelist
ou explicitement approuvé via:
$sce.trustAsResourceUrl(url)
success/error
étaient obsolètes .UTILISATION:
Réponse précédente: Angular 1.5.x et avant
Tout ce que vous devriez faire est de changer
callback=jsonp_callback
pourcallback=JSON_CALLBACK
ainsi:Et puis votre
.success
fonction devrait se déclencher comme vous l'avez si le retour a réussi.Cela vous évite d'avoir à salir l'espace mondial. Ceci est documenté dans la documentation AngularJS ici .
Mise à jour du violon de Matt Ball pour utiliser cette méthode: http://jsfiddle.net/subhaze/a4Rc2/114/
Exemple complet:
la source
La CHOSE LA PLUS IMPORTANTE que je n'ai pas comprise pendant un certain temps est que la requête DOIT contenir "callback = JSON_CALLBACK", car AngularJS modifie l'url de la requête , en remplaçant un identifiant unique par "JSON_CALLBACK". La réponse du serveur doit utiliser la valeur du paramètre 'callback' au lieu du codage en dur "JSON_CALLBACK":
Depuis que j'écrivais mon propre script de serveur PHP, je pensais savoir quel nom de fonction il voulait et je n'avais pas besoin de passer "callback = JSON_CALLBACK" dans la requête. Grosse erreur!
AngularJS remplace "JSON_CALLBACK" dans la requête par un nom de fonction unique (comme "callback = angular.callbacks._0"), et la réponse du serveur doit renvoyer cette valeur:
la source
json
fichier statique codé en dur .Cela a été très utile. Angular ne fonctionne pas exactement comme JQuery. Il a sa propre méthode jsonp (), qui nécessite en effet "& callback = JSON_CALLBACK" à la fin de la chaîne de requête. Voici un exemple:
Ensuite, affichez ou manipulez {{data}} dans votre modèle angulaire.
la source
Cela devrait fonctionner parfaitement pour vous, tant que la fonction
jsonp_callback
est visible dans la portée globale:Démo complète: http://jsfiddle.net/mattball/a4Rc2/ (avertissement: je n'ai jamais écrit de code AngularJS auparavant)
la source
Vous devez encore définir
callback
dans les paramètres:Où 'functionName' est une référence stringifiée à une fonction définie globalement. Vous pouvez le définir en dehors de votre script angulaire puis le redéfinir dans votre module.
la source
Pour l'analyse, faites ceci-
Ou vous pouvez utiliser `$ scope.data = JSON.Stringify (data);
Dans le modèle angulaire, vous pouvez l'utiliser comme
la source
pour moi, les solutions ci-dessus n'ont fonctionné qu'une fois que j'ai ajouté "format = jsonp" aux paramètres de la requête.
la source
J'utilise angular 1.6.4 et la réponse fournie par subhaze n'a pas fonctionné pour moi. Je l'ai un peu modifié, puis cela a fonctionné - vous devez utiliser la valeur renvoyée par $ sce.trustAsResourceUrl . Code complet:
la source