web-dev-qa-db-ja.com

Angular $ httpサービス-JSONへの応答を強制的に解析しない

サーバーに「test.ini」ファイルがあり、次のテキストが含まれています。

_"[ALL_OFF]
 [ALL_ON]
"
_

_$http_サービスを介してこのファイルのコンテンツを取得しようとしています。これが私の関数の一部です。

_  var params = { url: 'test.ini'};
 $http(params).then(
                 function (APIResponse)
                   {
                     deferred.resolve(APIResponse.data);
                   },
                    function (APIResponse)
                   {
                     deferred.reject(APIResponse);
                   });
_

この操作でAngular例外が発生しました(SyntaxError:予期しないトークンA)。
Angularフレームワークファイルを開いたところ、例外が見つかりました:
テキストファイルのコンテンツは "["で始まり、 "]"で終わるため、Angular "考える" JSONファイルです。

Angularコード(1.2.23バージョン)の7474行目):

_ var defaults = this.defaults = {
    // transform incoming response data
    transformResponse: [function(data) {
      if (isString(data)) {
        // strip json vulnerability protection prefix
        data = data.replace(PROTECTION_PREFIX, '');
        if (JSON_START.test(data) && JSON_END.test(data))
          data = fromJson(data);
      }
      return data;
    }],
_

私の質問:

どのようにすればよいですかforce angular to notこのチェックを行う(if (JSON_START.test(data) && JSON_END.test(data)))およびnot = JSONへのテキスト応答を解析しますか?

16
cheziHoyzer

これでデフォルトを上書きできます:

$http({
  url: '...',
  method: 'GET',
  transformResponse: [function (data) {
      // Do whatever you want!
      return data;
  }]
});

上記の関数は、このHTTPリクエストに使用するデフォルトの関数を置き換えます。

または、「リクエストごとのデフォルトの変換のオーバーライド」を記述した this をお読みください。

43
Sebastian Barth

また、angularを強制して、応答をJSONではなくプレーンテキストとして処理することもできます。

$http({
    url: '...',
    method: 'GET',
    responseType: 'text'
});

これにより、Angularがコンテンツタイプの自動検出を試みないようになります。

9
Ties