Как я могу вставлять команды раньше или запрещать автоматическое разборку $http JSONP в AngularJS?
Кажется, что почти каждый вопрос или объяснение, которое я нахожу в отношении $http или angularjs, в целом предполагает, что вы можете изменить ответ от своих запросов. Я не могу этого сделать, и ответ, который я получаю, неверен (согласно парсеру AngularJS). Он исказился согласованным образом, поэтому я мог изменить простой текст, чтобы исправить проблему до его синтаксического анализа, но как ответные перехватчики, так и функции ответа на преобразование происходят после разбора по умолчанию (на основе контента)?
Изменить: Проблема заключается в том, что мне нужно использовать методологию JSONP для запроса информации с другого сайта, но у данных нет ожидаемого обратного вызова JSONP, поэтому что-то (I 'еще не уверен, что его браузер на основе содержимого или код AngularJS) генерирует синтаксическую ошибку.
Новый вопрос: Кто-нибудь знает об этом?
Ответы
Ответ 1
Это было проверено и работает. Дайте мне знать, если у вас возникнут дополнительные вопросы. http://jsfiddle.net/moderndegree/Kn3Tc/
HTML
<div ng-app="myApp">
<div ng-controller="myController">
{{results.tada}}
</div>
</div>
Javascript
angular.module('myApp', ['ngResource']).
factory('myService', function($http, $resource, $log){
return $resource('/', {}, {
get: {
method: 'GET',
// placed custom transform ahead of $http default
transformRequest: [function(data, headersGetter){
$log.info(data);
$log.info(headersGetter());
}].concat($http.defaults.transformRequest),
// placed custom transform ahead of $http default
transformResponse: [function (data, headersGetter) {
$log.info(data);
$log.info(headersGetter());
data = {tada:"Check your console"};
return data;
}].concat($http.defaults.transformResponse)
}
});
}).
controller('myController', function(myService, $scope) {
$scope.results = myService.get();
});
Обновление
Чтобы использовать JSONP, просто переключите метод на JSONP. Вы можете узнать больше о ngResource здесь.
Ответ 2
Вот что говорится в документации angular
Чтобы глобально увеличить или переопределить преобразования по умолчанию, измените $httpProvider.defaults.transformRequest и $httpProvider.defaults.transformResponse. Эти свойства по умолчанию являются массивом функций преобразования, что позволяет push или unshift новая трансформационная функция в преобразование цепь. Вы также можете полностью переопределить любые значения по умолчанию преобразований, назначая ваши функции преобразования этим свойства непосредственно без оболочки массива.
В принципе, вам нужно будет настроить $httpProvider
angular.module('myApp', [])
.config(['$httpProvider', function ($httpProvider) {
//Define your transform function
//push your trasform function to the start of the array $httpProvider.defaults.transformResponse
//Or replace the transformResponse array with a function or a new array of tranform functions.
}]);
Теперь функция trasform, которую вы реализуете, должна быть первой функцией в массиве. Так как там есть строка для функции преобразования JSON.
Ответ 3
Angular добавила $jsonpCallbacks в версию 1.5.8
https://github.com/angular/angular.js/blob/master/src/ng/jsonpCallbacks.js
Это позволяет вам изменить функцию обратного вызова.