2012-07-31 71 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