我有点困惑,我这里有这个 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 错误调用上打印它,是否有我遗漏的东西?
错误函数永远不会被调用的原因是请求中的
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 响应状态代码。