处理错误的正确方法是什么?

问题描述 投票:0回答:1

我有点困惑,我这里有这个 PHP 代码,它位于我的文件 api.php 中:

try {
    $test = "testt";
    if ($test == "test") {
        echo json_encode('success');
    }
    else
    {
        throw new Exception('Condition wrong');
    }
} catch (Exception $e) {
    echo json_encode($e->getMessage());
}

我通过 Jquery ajax 调用 api.php,如下所示:

var data = $('#form').serialize();
$.ajax({url: "api.php", dataType: "json", data: data, type: "POST", 
success: function(result){
    console.log(result);
},
error: function (textStatus, errorThrown) {
    console.log(errorThrown);
    console.log(textStatus);
}});

我遇到的问题是:错误:函数(textStatus,errorThrown)没有被调用。我想在我的 catch 中抛出另一个异常而不是像这样的 json_encode 吗:

throw new Exception($e->getMessage());
而不是
echo json_encode($e->getMessage());

抛出 2 个具有相同消息的异常对我来说看起来很奇怪。目标是,如果抛出异常,捕获并在我的 ajax 错误调用上打印它,是否有我遗漏的东西?

php jquery ajax
1个回答
1
投票

错误函数永远不会被调用的原因是请求中的

http response status code
仍然是
200 (OK)
(因为异常已被捕获)。明确设置
http_response_code

try {
    if (false)
        echo json_encode(['success'=>true]);
    else
        throw new Exception('Condition wrong');

} catch (Exception $e) {
    http_response_code(500);
    echo json_encode(['success'=>false, 'message'=>$e->getMessage()]);
}

400 到 599 范围内的任何值都应该调用误差函数。请参阅 HTTP 响应状态代码

© www.soinside.com 2019 - 2024. All rights reserved.