Angular - JSON 中位置 1 的意外标记 x - 响应以 [

Angular - Unexpected token x in JSON at position 1 - response starts with [

我正在向我的服务器发送 $http 请求,我的响应格式是 [SERVICE_NAME = XYZ][PRAMA = YZR],请求完成后我收到此错误:

SyntexError: Unexpected token S in JSON position 1 at Object.parse

我认为这是因为响应以 [ 开头,有人遇到并解决了这个问题吗? 这是我的 $http 请求:

  var promise = $http({method : 'GET', url : baseUrl, headers:{"Content-Type":text/html}, params:queryParams}).then(function(response){
       console.log(response);
       retuen response.data;
    }, function(error){
         console.log(error)
    })
   return promise;
};

我知道我的 response 不是 vaild JSON,我仍然需要解析它。

谢谢。

您需要从服务器端进行配置以将数据发送为 text/plain 这段代码可以拯救你。

response.setContentType("text/plain");

您在 test/html

中有拼写错误
 var promise = $http({method : 'GET', url : baseUrl, headers:{"Content-Type":text/html}, params:queryParams}).then(function(response){
       console.log(response);
       retuen response.data;
    }, function(error){
         console.log(error)
    })
   return promise;
};

不要 return 您的回复 application/json 内容类型。 如果您的响应有 Content-Type header 且值为 application/json,Angular 将自动解析 JSON。 Return 您的回复 text/plain 内容类型可以避免这种情况。

另一种选择是手动设置响应转换函数,例如:

$http({
  url: '...',
  method: 'GET',
  transformResponse: [function (response) {
      // Data response is plain text at this point
      // So just return it, or do your parsing here
      return data;
  }]
});

我不确定,但为什么你的 header 是这样的:headers:{"Content-Type":text/html},它看起来不对。为什么不 headers:{"Content-Type": 'text/html'}

此外,Content-type header 表示仅对您的内容进行编码,而不是对答案进行编码,请尝试添加 "Accept" header:

headers:{'Content-Type': 'text/html', 'Accept': 'text/plain'}

这是协议的官方 W3C 规范和 headers https://www.w3.org/Protocols/rfc2616/rfc2616-sec14