Как я могу вставлять команды раньше или запрещать автоматическое разборку $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.