【问题标题】:Angular $http service - force not parsing response to JSONAngular $http 服务 - 强制不解析对 JSON 的响应
【发布时间】:2015-03-02 03:38:04
【问题描述】:

我的服务器中有一个“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: Unexpected token 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;
    }],

我的问题:

我如何强制角度进行此检查 (if (JSON_START.test(data) && JSON_END.test(data))) 并且将文本响应解析为 JSON? p>

【问题讨论】:

  • 让你的服务器返回带有text/plain的文件然后它就可以正常工作了

标签: json angularjs parsing http httpresponse


【解决方案1】:

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

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

上面的函数替换了你为这个 HTTP 请求设置的默认函数。

或者阅读this,他们在其中写道“覆盖每个请求的默认转换”。

【讨论】:

  • 或者直接transformResponse: undefined 不进行转换。
  • @dfsq 这是我寻找的答案 - “transformResponse: undefined”,谢谢!
【解决方案2】:

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

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

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

【讨论】:

  • 它不起作用,因为响应头中的content-type 是错误的(可能是application/json)。事实上,如果服务器提供正确的content-type,您就不需要在配置中添加responseType: 'text',并且角度会尊重这一点。
  • @AlirezaMirian 这是真的。在 Angular 中添加它的唯一原因是,如果服务器没有提供 content-type,它不会尝试将其解析为 JSON。
猜你喜欢
  • 2017-12-04
  • 2014-02-04
  • 1970-01-01
  • 2013-07-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-08-09
  • 2011-08-09
相关资源
最近更新 更多