如何在AngularJS之前插入命令或阻止$ http的JSONP自动解析?

Sha*_*man 16 javascript jsonp angularjs

看起来几乎每个关于$ http或angularjs的问题或解释都假定您可以修改请求的响应.我不能这样做,我得到的反应是错误的(根据AngularJS解析器).它以一致的方式出错,因此我可以在解析之前修改纯文本以解决问题,但是在默认(基于内容类型的?)解析之后,响应拦截器和转换响应函数都会发生.

编辑:问题在于我需要使用JSONP方法来从另一个站点请求信息,但数据没有预期的JSONP回调所以(我仍然不确定它是否基于浏览器)在内容或AngularJS代码上)抛出语法错误.

新问题:有没有人知道解决这个问题的方法?

Bri*_*wis 8

这已经过测试并且确实有效.如果您有任何其他问题,请与我们联系.http://jsfiddle.net/moderndegree/Kn3Tc/

HTML

<div ng-app="myApp">
    <div ng-controller="myController">
        {{results.tada}}
    </div>
</div>
Run Code Online (Sandbox Code Playgroud)

使用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();
});
Run Code Online (Sandbox Code Playgroud)

更新 要使用JSONP,只需将方法切换到JSONP.您可以在此处阅读有关ngResource的更多信息.