AngularJS:装饰$ http

时间:2012-07-31 12:40:25

标签: javascript ajax angularjs

我有一个简单的控制器,如:

function MyController($scope, $http) {
    ...
    $http.post(url).success(function(data) {
            console.log(data)
         });
}
MyController.$inject = ['$scope', '$http'];

一切都按预期工作,但我有一个问题。出于安全原因,返回的JSON用/ ** * /注释。使用jQuery,我扩展了$ .ajax对象以删除此注释,然后解析结果。我想用AngularJS实现同样的目的,并以某种方式告诉$ http来删除每个响应中的注释。我想为我的整个应用程序执行此操作,并避免始终键入相同的内容。

我有什么想法可以做到这一点?

2 个答案:

答案 0 :(得分:7)

您将要转换所有$http个回复。我之前没有这样做,但相关文档如下。

  

转换请求和响应

     

可以使用transform转换请求和响应   功能。默认情况下,Angular应用这些转换:

     

请求转换:

     
      
  • 如果请求配置对象的data属性包含一个对象,   将其序列化为JSON格式。
  •   
     

响应转换:

     
      
  • 如果检测到XSRF前缀,请将其删除(请参阅安全注意事项   以下部分)
  •   
  • 如果检测到json响应,则使用a反序列化   JSON解析器
  •   
     

要在本地覆盖这些转换,请指定   将函数转换为transformRequest和/或transformResponse   配置对象的属性。全局覆盖默认值   转换,覆盖$ httpProvider.defaults.transformRequest和   $ httpProvider.defaults.transformResponse的属性   $ httpProvider。

$http service documentation.

中阅读更多内容

答案 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 部分。