有人可以提供有关JSON如何使用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&amp; 5XX
答案 0 :(得分:0)
问题是在没有有效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)
});
但这不是正确的修复imo。你的头衔是要求一种优雅的方式来处理错误而第二种方法并不优雅。
还要注意那里的伪代码(如果状态是字符串或数字,我会忘记)。