Я использую угловой $http.jsonp()
запрос, который успешно возвращает json, завернутый в функцию:
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;
});
Как получить доступ / проанализировать возвращенный JSON, обернутый функцией?
javascript
angularjs
jsonp
Акронимн
источник
источник
jsonp_callback
? Если нет, то в этом твоя проблема.function jsonp_callback(data) { return data.found; //should be 3 }
Ответы:
ОБНОВЛЕНИЕ: начиная с Angular 1.6
Теперь вы должны определить обратный вызов следующим образом:
$http.jsonp('some/trusted/url', {jsonpCallbackParam: 'callback'})
Изменить / получить доступ / объявить параметр через
$http.defaults.jsonpCallbackParam
, по умолчаниюcallback
Примечание. Вы также должны убедиться, что ваш URL-адрес добавлен в надежный / белый список:
$sceDelegateProvider.resourceUrlWhitelist
или явно доверенный через:
$sce.trustAsResourceUrl(url)
success/error
были устаревшими .ОБЛАСТЬ ПРИМЕНЕНИЯ:
Предыдущий ответ: Angular 1.5.x и ранее
Все вы должны сделать , это изменить ,
callback=jsonp_callback
чтобыcallback=JSON_CALLBACK
выглядеть примерно так:И тогда ваша
.success
функция должна срабатывать, как если бы возврат был успешным.Поступая таким образом, вы избавляетесь от загрязнения глобального пространства. Это описано в документации AngularJS здесь .
Обновлена скрипка Мэтта Болла для использования этого метода: http://jsfiddle.net/subhaze/a4Rc2/114/
Полный пример:
источник
ГЛАВНОЕ я не понял довольно долго, что запрос должен содержать «обратный вызов = JSON_CALLBACK», потому что AngularJS модифицирует запрос URL , подставляя уникальный идентификатор «JSON_CALLBACK». В ответе сервера должно использоваться значение параметра callback вместо жесткого кодирования JSON_CALLBACK:
Поскольку я писал свой собственный сценарий PHP-сервера, я думал, что знаю, какое имя функции он хочет, и мне не нужно было передавать в запросе «callback = JSON_CALLBACK». Большая ошибка!
AngularJS заменяет «JSON_CALLBACK» в запросе на уникальное имя функции (например, «callback = angular.callbacks._0»), и ответ сервера должен возвращать это значение:
источник
json
файлом.Это было очень полезно. Angular работает не так, как JQuery. У него есть собственный метод jsonp (), который действительно требует "& callback = JSON_CALLBACK" в конце строки запроса. Вот пример:
Затем отобразите или измените {{данные}} в вашем шаблоне Angular.
источник
Это должно сработать для вас, пока функция
jsonp_callback
видна в глобальной области:Полная демонстрация: http://jsfiddle.net/mattball/a4Rc2/ (отказ от ответственности: я никогда раньше не писал код AngularJS)
источник
Вам все еще нужно указать
callback
в параметрах:Где «functionName» - это строковая ссылка на глобально определенную функцию. Вы можете определить его вне сценария angular, а затем переопределить в своем модуле.
источник
Для разбора сделайте это -
Или вы можете использовать `$ scope.data = JSON.Stringify (data);
В шаблоне Angular вы можете использовать его как
источник
для меня вышеуказанные решения работали только после того, как я добавил «format = jsonp» в параметры запроса.
источник
Я использую angular 1.6.4, и ответ, предоставленный subhaze , для меня не сработал. Я немного изменил его, и он сработал - вам нужно использовать значение, возвращаемое $ sce.trustAsResourceUrl . Полный код:
источник