Угловой ресурс $ с jsonp не работает
У меня проблемы со следующим кодом:
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' }
}
);
});
вызов Offer.query({}, function(){}); у меня контроллер работает без проблем. но эта часть не работает
var trustYouData = Trustyou.query({ id: 'd8421e79-99f0-41b2-8d6e-9cfd62a9776b' }, function (data) {
console.log(data);
});
это всегда возвращает ошибку 400:
"Ошибка сети: 400 неверных запросов - https://api.trustyou.com/hotels/d8421e79-99f0-41b2-8d6e-9cfd62a9776b/seal.json?callback=angular.callbacks._1"
когда я изменяю свой код и использую jQuerys.getJSON, у меня не возникает никаких проблем:
$.getJSON("https://api.trustyou.com/hotels/d8421e79-99f0-41b2-8d6e-9cfd62a9776b/seal.json?callback=?", function (data) {
console.log(data);
});
Почему метод jQuery работает, но реализация angulars $resource в этом случае возвращает ошибку?
2 ответа
Есть некоторая проблема с функцией обратного вызова на angular, я открыл проблему в git
https://github.com/angular/angular.js/issues/1551
Имя обратного вызова должно быть "JSONP_CALLBACK", в котором angular превратит имя обратного вызова в callback=angular.callbacks._1
Есть какой-то веб-сервис, который не может принять имя обратного вызова angular.callbacks._1.
решение:
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)
});
};
}
Моя скрипка http://jsfiddle.net/pMGgR/
Суть в том, что вы должны вызвать другую функцию javascript, чтобы получить свой json ответ.
Надеюсь это поможет
Я думал, что добавлю реальное решение этой проблемы. Это рабочее решение.
Вот код
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);
});
Возвращает
//[{"Symbol":"NFLX","Name":"Netflix Inc","Exchange":"NASDAQ"}]