サーバーに「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へのテキスト応答を解析しますか?
これでデフォルトを上書きできます:
$http({
url: '...',
method: 'GET',
transformResponse: [function (data) {
// Do whatever you want!
return data;
}]
});
上記の関数は、このHTTPリクエストに使用するデフォルトの関数を置き換えます。
または、「リクエストごとのデフォルトの変換のオーバーライド」を記述した this をお読みください。
また、angularを強制して、応答をJSONではなくプレーンテキストとして処理することもできます。
$http({
url: '...',
method: 'GET',
responseType: 'text'
});
これにより、Angularがコンテンツタイプの自動検出を試みないようになります。