2012-07-31 100 views
6

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

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

一切正常,但我有一个问题。出于安全原因,返回的JSON注释为/ ** * /。使用jQuery,我扩展了$ .ajax对象来删除这些注释,然后解析结果。我想要达到与AngularJS相同的效果,并以某种方式告诉$ http,以便从每个响应中删除评论。我想为我的整个应用程序执行此操作,并避免始终输入相同的内容。

任何想法,我可以做到这一点?

回答

7

您将要转换所有$http响应。我以前没有这样做,但相关文档如下。

转化请求和响应

请求和响应可使用变换 函数进行变换。如果请求配置对象的数据属性包含一个对象, 连载成JSON格式

  • :默认情况下,角适用这些转变:

    请求转换。

响应变换:

  • 如果检测XSRF前缀,条带(见安全考虑下面 部)
  • 如果检测JSON响应,使用 JSON解析器
  • 反序列化

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

更多的$http service documentation.

+0

对不起接受迟到。我其实错过了你提到的文档中的一个重要部分(在我问之前我读过它们)。无论如何,现在我制作了一个拦截器,它可以转换我的请求,这要归功于您的提示。 – Christian 2012-08-21 16:27:02

+0

@Christian你可以发布你的转换为例吗? – colllin 2014-06-29 20:52:59

3

您不妨从/** */到其已经被$http支持开箱即用的包装JSON响应切换。相反,请用)]}',\n作为前缀。

例如如果你的JSON的反应是:

['one','two'] 

然后,而不是返回:

/**['one','two']*/ 

简单的返回:

)]}', 
['one','two'] 

有关详细信息,请参阅JSON漏洞防护http://docs.angularjs.org/api/ng.$http

+0

谢谢。我已经看到了。不幸的是,我不能轻易改变它,因为我需要保持向后兼容。这需要我目前没有的很多关注。我会在稍后时间提出这个问题。无论如何,我高举了它,因为其他人应该看到你的答案是一个非常好的答案。 – Christian 2012-10-05 20:24:41