6

次のような単純なコントローラーがあります。

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

すべてが期待どおりに機能しますが、問題があります。返される JSON は、セキュリティ上の理由から /** */ でコメント化されています。jQuery を使用して $.ajax オブジェクトを拡張し、このコメントを削除してから結果を解析しました。私は AngularJS で同じことを達成し、何とか $http に各応答からコメントを削除するように伝えたいと思います。アプリケーション全体でこれを行い、常に同じ入力を避けたいです。

どのように私はそれを行うことができますか?

4

2 に答える 2

7

$httpすべての応答を変換したいと思うでしょう。これまで行ったことはありませんが、関連するドキュメントを以下に示します。

リクエストとレスポンスの変換

変換関数を使用して、要求と応答の両方を変換できます。デフォルトでは、Angular は次の変換を適用します。

リクエスト変換:

  • リクエスト構成オブジェクトの data プロパティにオブジェクトが含まれている場合は、JSON 形式にシリアル化します。

応答変換:

  • XSRF プレフィックスが検出された場合は、それを削除します (以下のセキュリティに関する考慮事項のセクションを参照してください)。
  • json 応答が検出された場合は、JSON パーサーを使用して逆シリアル化します

これらの変換をローカルでオーバーライドするには、変換関数を構成オブジェクトの transformRequest および/または transformResponse プロパティとして指定します。デフォルトの変換をグローバルにオーバーライドするには、$httpProvider の $httpProvider.defaults.transformRequest および $httpProvider.defaults.transformResponse プロパティをオーバーライドします。

詳細については、$httpサービス ドキュメントを参照してください。

于 2012-07-31T15:11:59.150 に答える
3

/** */JSON 応答のラッピングを ですぐにサポートされているものに切り替えることができます$http。代わりに、JSON 応答の前に)]}',\n.

たとえば、JSON 応答が次の場合:

['one','two']

次に、返す代わりに:

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

単純に次を返します。

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

詳細については、http://docs.angularjs.org/api/ng.$httpのJSON Vulnerability Protectionセクションを参照してください。

于 2012-10-05T20:08:46.580 に答える