似乎我发现的关于$http或angularjs的每个问题或解释都假定你可以修改你的请求的响应。我不能这样做,并且我得到的响应是错误的(根据AngularJS解析器)。它的格式是一致的,所以我可以在解析它之前修改纯文本来修复问题,但是响应拦截器和转换响应函数都发生在默认之后(基于内容类型?)解析。
JSONP编辑:问题在于我需要使用方法从另一个站点请求信息,但数据没有预期的JSONP回调,因此某些东西(我仍然不确定是浏览器基于内容还是AngularJS代码)抛出了语法错误。
新问题:有人知道解决这个问题的方法吗?
发布于 2013-06-27 09:19:16
这是经过测试的,并且确实有效。如果你有任何进一步的问题,请告诉我。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即可。您可以阅读有关ngResource here的更多信息。
发布于 2013-06-27 11:41:22
下面是angular文档所说的内容
要全局增强或覆盖默认转换,请修改$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.
}]);
现在,您实现的转换函数应该是数组中的第一个函数。因为那里已经有一个JSON转换函数字符串。
发布于 2016-09-01 02:24:38
Angular在1.5.8 https://github.com/angular/angular.js/blob/master/src/ng/jsonpCallbacks.js版本中添加了$jsonpCallbacks
这允许您修改回调函数。
https://stackoverflow.com/questions/17332922
复制相似问题