似乎几乎每个关于$ http或angularjs的问题或解释都假定您可以修改请求的响应。我不能这样做,我得到的反应是错误的(根据AngularJS解析器)。它以一致的方式出错,因此我可以在解析之前修改纯文本来修复问题,但是在默认(基于内容类型的?)解析之后,响应拦截器和转换响应函数都会发生。
编辑:问题在于我需要使用JSONP方法从其他网站请求信息,但数据没有预期的JSONP回调所以(I我仍然不确定它的浏览器是基于内容还是基于AngularJS代码而引发语法错误。
新问题:有没有人知道解决这个问题的方法?
答案 0 :(得分:8)
这已经过测试并且确实有效。如果您有任何其他问题,请与我们联系。 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 here的更多信息。
答案 1 :(得分:1)
这是角度文档所说的
要全局扩充或覆盖默认转换,请修改 $ httpProvider.defaults.transformRequest和 $ httpProvider.defaults.transformResponse属性。这些属性 默认情况下是一个转换函数数组,允许您使用 将新转换函数推入或取消转换为转换 链。您还可以决定完全覆盖任何默认值 通过将转换函数分配给这些转换 直接没有数组包装器的属性。
基本上你需要做的是配置$ 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转换函数。
答案 2 :(得分:0)
Angular has added $jsonpCallbacks in version 1.5.8 https://github.com/angular/angular.js/blob/master/src/ng/jsonpCallbacks.js
This allows you to modify the callback function.