【问题标题】:$http - null plain text response$http - null 纯文本响应
【发布时间】:2015-03-08 07:31:13
【问题描述】:

我在 AngularJS 中有一个 $http POST 调用,如果请求错误,它不会显示服务器响应。

myFactory.create = function(formData) {
  deferred = $q.defer()
  $http({method: 'POST', url: url, responseType: 'json', data: formData})
    .then(function(data) {
      deferred.resolve(data);
    }, function(response, status, headers, config) {
      deferred.reject(response);
  });

  return deferred.promise;
};

当我提交不正确的数据时,API 会响应 400 - 错误请求。如果我查看 Chrome 开发者工具中的响应,会有一条纯文本消息:“垂直不正确。”但是,该消息不在 $http 错误回调的响应中。

我可以获取其他所有内容(状态、标题和配置),但我的响应数据为空。

正确处理成功的 POST,因此我知道该功能通常可以正常工作。

知道为什么我可以在 Chrome 中看到响应但无法通过 $http 访问它吗?

【问题讨论】:

  • 建议:不要在已经存在承诺的地方创建承诺。这就是所谓的反模式..
  • 您可以发布您实际从返回的承诺中获取数据的部分吗?另外,我只是假设您将“url”更改为变量,尽管它不存在。而且您没有将 deferred 声明为 var。
  • 是的。 “url”实际上是一个变量,是在我工厂的其他地方生成的。现在,我刚刚用 console.log(response) 检查它,看看有错误时返回什么。
  • 您的回复如何?
  • {"data": null, "statusText": "Bad Request", "status": 400, "config": data...}。 “config”包含了header信息、最初提交的数据、headers、method、responseType、url、status、statusText、transformRequest和transformResponse。其中每一个都有其下方的信息,但没有一个包含我可以在开发人员工具的“响应”选项卡下查看的文本。

标签: angularjs angularjs-http


【解决方案1】:

你可以重构这个:

myFactory.create = function(formData) {
  var url = 'api/create';  
  return $http({
    method: 'POST', 
    url: url, 
    responseType: 'json',  //Are you sure that it is returning a json??
    data: formData
  });
};

然后在任何你想调用它的地方检查这样的承诺的返回,

myFactory.create().then(
  function(data){
     console.dir(data);
  },function(response, status, headers, config) {
     console.dir(response);
  });

这应该可以工作,您应该会在日志中看到数据。

【讨论】:

  • 如果您不确定答案并愿意提供部分帮助,最好使用 cmets。
  • 对此很抱歉,但这个答案太长了,无法评论,而且很有可能是正确的。也许对我所说的话进行一些修改会使它听起来更好。
  • 我不同意,除了删除 $q.defer() 并直接返回 http 承诺之外,您并没有改变代码的逻辑,因为 OP 说响应数据为空,这不会帮助。剩下的唯一情况是 OP 的服务器可能没有返回您提到的有效 JSON,这可以总结为评论。我想如果是这样的话,这个问题将作为一个简单的印刷错误关闭。
  • 对不起,我是 stackoverflow 的新手。我明白了。
  • 没关系,我们曾经都是 SO 新手 :)
猜你喜欢
  • 1970-01-01
  • 2014-05-01
  • 2014-08-10
  • 1970-01-01
  • 1970-01-01
  • 2018-12-02
  • 1970-01-01
  • 2013-10-20
  • 1970-01-01
相关资源
最近更新 更多