抛出异常,但 json 响应获得状态 SUCCESS
Throw exception, but json response get status SUCCESS
我在 Controller 中有这部分代码,但是当我执行此操作并且 IF 工作正常并且错误消息出现在控制台日志中时。
但看起来 'success' 的状态为 true。而且不应该
Try {
if ($last['date']) {
if ($last['date']->format('d-m-Y') == $par['date']) {
throw new \Exception('error', 500);
}
}
return new JsonResponse([
'success' => true,
'data' => $content,
'message' => 'success'
]);
} catch (\Exception $exception) {
return new JsonResponse([
'success' => false,
'code' => $exception->getCode(),
'message' => $exception->getMessage(),
]);
}
JQuery
$.ajax({
type: "POST",
url: "/app/url",
data: TableData,
dataType: "json",
success: function(response){
console.log(response.message);
$('#message').html('<p class="alert alert-success">' + response.message + '</p>');
},
error: function (response) {
console.log(response.message);
$('#message').html('<p class="alert alert-danger">' + response.message + '</p>');
}
});
无论 JSON 内容如何,您的 AJAX 代码每次都会收到 success
的响应,因为您总是发送 200
响应(是成功)。要告诉 AJAX 将响应作为错误处理(并转到 error
方法而不是 AJAX 响应处理程序中的 success
方法),您需要发送一个错误响应中的代码,即 400
,如下所示:
return new JsonResponse([
'success' => false,
'code' => 400,
'message' => $exception->getMessage(),
], 400);
因此,如果您要抛出自定义 Exception
,则需要根据它们的真实 HTTP 含义为每个设置 code
属性。
现在,AJAX 中的 success
和 error
处理程序具有不同的参数。在success
中,第一个参数是data
,只是从服务器返回的数据。另一方面,在 error
中,第一个参数是一个 jqXHR
对象。要访问此对象中的数据,您需要一些不同的参数,但现在您需要的是 JSON,因为您有 jqXHR.responseJSON
。所以,现在您的错误消息将在 response.responseJSON.message
中,而不是 response.message
中。查看更多相关信息 here.
我在 Controller 中有这部分代码,但是当我执行此操作并且 IF 工作正常并且错误消息出现在控制台日志中时。
但看起来 'success' 的状态为 true。而且不应该
Try {
if ($last['date']) {
if ($last['date']->format('d-m-Y') == $par['date']) {
throw new \Exception('error', 500);
}
}
return new JsonResponse([
'success' => true,
'data' => $content,
'message' => 'success'
]);
} catch (\Exception $exception) {
return new JsonResponse([
'success' => false,
'code' => $exception->getCode(),
'message' => $exception->getMessage(),
]);
}
JQuery
$.ajax({
type: "POST",
url: "/app/url",
data: TableData,
dataType: "json",
success: function(response){
console.log(response.message);
$('#message').html('<p class="alert alert-success">' + response.message + '</p>');
},
error: function (response) {
console.log(response.message);
$('#message').html('<p class="alert alert-danger">' + response.message + '</p>');
}
});
无论 JSON 内容如何,您的 AJAX 代码每次都会收到 success
的响应,因为您总是发送 200
响应(是成功)。要告诉 AJAX 将响应作为错误处理(并转到 error
方法而不是 AJAX 响应处理程序中的 success
方法),您需要发送一个错误响应中的代码,即 400
,如下所示:
return new JsonResponse([
'success' => false,
'code' => 400,
'message' => $exception->getMessage(),
], 400);
因此,如果您要抛出自定义 Exception
,则需要根据它们的真实 HTTP 含义为每个设置 code
属性。
现在,AJAX 中的 success
和 error
处理程序具有不同的参数。在success
中,第一个参数是data
,只是从服务器返回的数据。另一方面,在 error
中,第一个参数是一个 jqXHR
对象。要访问此对象中的数据,您需要一些不同的参数,但现在您需要的是 JSON,因为您有 jqXHR.responseJSON
。所以,现在您的错误消息将在 response.responseJSON.message
中,而不是 response.message
中。查看更多相关信息 here.