我有一个简单的控制器,如:
function MyController($scope, $http) {
...
$http.post(url).success(function(data) {
console.log(data)
});
}
MyController.$inject = ['$scope', '$http'];
一切都按预期工作,但我有一个问题。出于安全原因,返回的JSON用/ ** * /注释。使用jQuery,我扩展了$ .ajax对象以删除此注释,然后解析结果。我想用AngularJS实现同样的目的,并以某种方式告诉$ http来删除每个响应中的注释。我想为我的整个应用程序执行此操作,并避免始终键入相同的内容。
我有什么想法可以做到这一点?
答案 0 :(得分:7)
您将要转换所有$http
个回复。我之前没有这样做,但相关文档如下。
中阅读更多内容转换请求和响应
可以使用transform转换请求和响应 功能。默认情况下,Angular应用这些转换:
请求转换:
- 如果请求配置对象的data属性包含一个对象, 将其序列化为JSON格式。
响应转换:
- 如果检测到XSRF前缀,请将其删除(请参阅安全注意事项 以下部分)
- 如果检测到json响应,则使用a反序列化 JSON解析器
要在本地覆盖这些转换,请指定 将函数转换为transformRequest和/或transformResponse 配置对象的属性。全局覆盖默认值 转换,覆盖$ httpProvider.defaults.transformRequest和 $ httpProvider.defaults.transformResponse的属性 $ httpProvider。
答案 1 :(得分:3)
您可能希望从/** */
中将JSON回复包装到$http
开箱即用的回复中。而是使用)]}',\n
为您的JSON响应添加前缀。
e.g。如果您的JSON响应是:
['one','two']
然后,而不是返回:
/**['one','two']*/
简单地返回:
)]}',
['one','two']
有关详细信息,请参阅http://docs.angularjs.org/api/ng.$http中的 JSON Vulnerability Protection 部分。