J'ai des problèmes avec le code suivant:
angular.module('offerServices', ['ngResource']) .factory('Offer', function ($resource) { return $resource('url/offers', { callback: 'JSON_CALLBACK' }, { query: { method: 'JSONP' } } ); }) .factory('Trustyou', function ($resource) { return $resource('https://api.trustyou.com/hotels/:id/seal.json', {}, { query: { method: 'JSONP' } } ); });
Appelant Offer.query ({}, function () {}); Dans mon contrôleur fonctionne sans aucun problème. Mais cette partie ne fonctionne pas:
var trustYouData = Trustyou.query({ id: 'd8421e79-99f0-41b2-8d6e-9cfd62a9776b' }, function (data) { console.log(data); });
Cela renvoie toujours une erreur 400:
"NetworkError: 400 mauvaise demande – https://api.trustyou.com/hotels/d8421e79-99f0-41b2-8d6e-9cfd62a9776b/seal.json?callback=angular.callbacks._1 "
Lorsque je change mon code et que j'utilise jQuerys.getJSON, je n'ai aucun problème:
$.getJSON("https://api.trustyou.com/hotels/d8421e79-99f0-41b2-8d6e-9cfd62a9776b/seal.json?callback=?", function (data) { console.log(data); });
Pourquoi la méthode jQuery fonctionne-t-elle, mais les angulaires $ l'implémentation des ressources renvoie une erreur dans ce cas?
Il y a un problème avec la fonction callback sur angular, j'ai ouvert un problème dans git
https://github.com/angular/angular.js/issues/1551
Le nom de rappel doit être "JSONP_CALLBACK" dans lequel angulaire va transformer le nom de rappel en callback = angular.callbacks._1
Il existe un service Web Web qui ne peut pas accepter "angular.callbacks._1" nom de rappel.
Solution :
var stock_hack function stock_search(data) { stock_hack = data; } var stock_hack function stock_search(data) { stock_hack = data; } function jsonp_example($scope, $http) { $scope.doRequest = function() { $http({ method: "JSONP", params: { input: "GM", callback: "stock_search" }, url: "http://dev.markitondemand.com/Api/Lookup/jsonp", isArray: true }).success(function(data, status) { /* *Never Goes HERE !! */ }).error(function(data, status) { /* * FREAKING HACK !!!! */ console.info("goes here") console.info(stock_hack) }); }; }
Mon violon http://jsfiddle.net/pMGgR/
Le but est que vous devez appeler une autre fonction javascript pour obtenir votre réponse de json.
J'espère que cette aide
Je pensais ajouter une solution réelle à ce problème. C'est une solution de travail.
Voici le code
var symbol = 'NFLX'; var url = "http://dev.markitondemand.com/Api/v2/Lookup/jsonp?input="+ symbol +"&callback=JSON_CALLBACK"; $http.jsonp(url) .success(function(data){ console.info(data); }).error(function(data, status) { console.info(data); });
Résultats
//[{"Symbol":"NFLX","Name":"Netflix Inc","Exchange":"NASDAQ"}]
Cliquez ici pour accéder au lien direct