113 votes

l'analyse JSONP $http.jsonp() réponse en angular.js

Je suis à l'aide angulaire de l' $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;
    });

Le problème est, je ne sais pas comment accéder à/analyser la fonction renvoyée plastique-JSON. De toute orientation est très apprécié. Merci!

302voto

subhaze Points 4903

Tout ce que vous devez avoir à faire est de changer callback=jsonp_callback de callback=JSON_CALLBACK comme:

var url = "http://public-api.wordpress.com/rest/v1/sites/wtmpeachtest.wordpress.com/posts?callback=JSON_CALLBACK";

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.

Mise à jour de Matt Boule de violon à utiliser cette méthode: http://jsfiddle.net/subhaze/a4Rc2/114/

Exemple complet:

var url = "http://public-api.wordpress.com/rest/v1/sites/wtmpeachtest.wordpress.com/posts?callback=JSON_CALLBACK";

$http.jsonp(url)
    .success(function(data){
        console.log(data.found);
    });

69voto

Joseph Oster Points 1089

La CHOSE la PLUS IMPORTANTE que je ne comprenais pas 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":

JSON_CALLBACK(json_response);  // wrong!

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:

angular.callbacks._0(json_response);

4voto

Matt Ball Points 165937

Cela devrait fonctionner très bien pour vous, tant que la fonction jsonp_callback est visible dans la portée globale:

function jsonp_callback(data) {
    // returning from async callbacks is (generally) meaningless
    console.log(data.found);
}

var url = "http://public-api.wordpress.com/rest/v1/sites/wtmpeachtest.wordpress.com/posts?callback=jsonp_callback";

$http.jsonp(url);

Démo: http://jsfiddle.net/mattball/a4Rc2/ (disclaimer: je n'ai jamais écrit une AngularJS code avant)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X