【发布时间】: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。其中每一个都有其下方的信息,但没有一个包含我可以在开发人员工具的“响应”选项卡下查看的文本。