有人可以提供有关$http如何与 JSON 相关的背景信息,它是检测输出格式并在成功后自动将其转换为 JSON 还是我必须手动处理?
如果这是默认行为,如果无法将输出转换为 JSON 会发生什么?
上下文:在这种情况下,我的 Web 服务由于 sql 连接错误而失败,但仍success
被调用
我的$http相关代码序列:
this.$http.defaults.headers.common["Accept"] = "application/json";
this.$http.get(common.Config.getEndPoint() + "/sync", {params:params})
.success(function(data, status, headers, config) {
self.onResult(data);
})
.error(function(data, status, headers, config){
console.log(data)
});
错误 - (因为我的 mySQL 服务器没有运行,这可以修复,但我的目标是在发生这种情况时在前端优雅地处理此错误,在后端和前端寻找一个好的策略(
SQLSTATE[HY000] [2002] Connection refused<br />
<b>Fatal error</b>: Call to a member function prepare() on a non-object in
生成错误的 PHP 行
$statement = $this->connection->prepare("SELECT id, username, password FROM `user` WHERE username = :username AND suspended = 0 AND deleted = 0");
学习:成功适用于任何 2xx 状态代码,而错误针对任何 1xx、3xx、4xx 和 5xx
问题是返回的成功状态代码没有有效的 JSON 数据。这是由于您的 API 返回了不正确的状态代码。如果您想实际解决问题,则应在 API 中解决此问题:
if db is down
return 503 or something.
否则,您可以在成功回调中检查状态代码:
this.$http.get(common.Config.getEndPoint() + "/sync", {params:params})
.success(function(data, status, headers, config) {
if (status starts with 2)
self.onResult(data);
})
.error(function(data, status, headers, config){
console.log(data)
});
但这不是正确的解决方法。你的游戏要求一种优雅的方式来处理错误,而第二种方法不是优雅的。
还要注意那里的伪代码(我忘记了状态是字符串还是数字(。