Брось исключение, но ответ json получит статус УСПЕХ

У меня есть эта часть кода в контроллере, но когда я делаю это действие, и если IF работает нормально, и сообщение об ошибке появляется в журнале консоли.

Но похоже, что «успех» имеет статус «правда». И это не должно

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>');
}
});

1

Решение

Ваш AJAX-код получает ответ как success каждый раз, независимо от содержимого JSON, потому что вы всегда отправляете 200 ответ (который является успехом). Чтобы сказать AJAX обработать ответ как ошибку (и перейти к error метод вместо success метод в вашем обработчике ответа AJAX), вам нужно отправить код ошибки в ответе, т.е. 400, как это:

return new JsonResponse([
'success' => false,
'code'    => 400,
'message' => $exception->getMessage(),
], 400);

Итак, если вы бросаете свой обычай Exceptions, вам нужно установить code свойство для каждого в соответствии с их реальным значением HTTP.

Теперь success а также error Обработчики в AJAX имеют разные параметры. В successпервый параметр data, просто данные, возвращенные с сервера. С другой стороны, в errorпервый параметр jqXHR объект. Для доступа к данным в этом объекте у вас есть несколько различных параметров, но теперь вам нужно, поскольку у вас есть JSON, jqXHR.responseJSON, Итак, теперь ваше сообщение об ошибке будет в response.responseJSON.message, не в response.message, Подробнее об этом Вот.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]