angularjs Angular $http服务-强制不解析JSON响应

mpbci0fu  于 2022-10-31  发布在  Angular
关注(0)|答案(2)|浏览(211)

我的服务器中有一个“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 异常(语法错误:意外的标记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;
    }],

我的问题:
我如何强制angular执行此检查(if (JSON_START.test(data) && JSON_END.test(data))),并且解析JSON的文本响应?

mrwjdhj3

mrwjdhj31#

您可以通过以下方式覆盖默认值:

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

上面的函数替换了您为此HTTP请求发布的默认函数。
或者阅读this,他们在那里写了“覆盖每个请求的默认转换”。

wwodge7n

wwodge7n2#

您还可以强制angular将响应视为纯文本而不是JSON:

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

这将确保Angular不会尝试自动检测内容类型。

相关问题