angular $ http优雅地处理错误

时间:2014-12-22 21:58:14

标签: php angularjs

有人可以提供有关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

1 个答案:

答案 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。你的头衔是要求一种优雅的方式来处理错误而第二种方法并不优雅。

还要注意那里的伪代码(如果状态是字符串或数字,我会忘记)。