#ajax #validation #laravel-5
#ajax #проверка #laravel-5
Вопрос:
Это ответ, который я получаю, если мой запрос ajax заканчивается ошибками проверки…
{"readyState":4,"responseText":"{"email":["The email field is required."]}","responseJSON":{"email":["The email field is required."]},"status":422,"statusText":"Unprocessable Entity"}
Хотите сгенерировать ответ в аналогичном формате, если запрос обработан успешно.
Был бы признателен за подробное описание.
Я просмотрел различные ответы, уже опубликованные здесь, но ни один из них мне не помог. Спасибо 🙂
Ответ №1:
Поскольку это всего лишь JSON, а laravel поддерживает JSON-резонансы из коробки, единственное, что вам нужно сделать, это вернуть массив с вашими данными:
Route::get("/test", function() {
$response = ["email" => ["The email field is required."]];
return [
"readyState" => 4,
"responseText" => json_encode($response),
"responseJSON" => $response,
"status" => 422,
"statusText" => "Unprocessable Entity"
];
});
Laravel возвращает каждый массив в формате JSON и добавляет Content-Type: application/json
заголовок к HTTP-запросу.
Приведенный выше пример дает вам именно вашу строку: {"readyState":4,"responseText":"{"email":["The email field is required."]}","responseJSON":{"email":["The email field is required."]},"status":422,"statusText":"Unprocessable Entity"}
РЕДАКТИРОВАТЬ: Для установки кода состояния вы можете использовать response()->json()
вот так:
Route::get("/test", function() {
$response = ["email" => ["The email field is required."]];
return response()->json($response, 422);
});
response()
возвращает экземпляр IlluminateRoutingResponseFactory
, чтобы вы могли искать возможные параметры: function json($data = [], $status = 200, array $headers = [], $options = 0)
Комментарии:
1. Это возвращает все, включая статус, как часть ответа, но ответ Laravel об ошибке проверки по умолчанию возвращает статус как часть заголовка. Означает, что при просмотре в сетевом журнале отображается только
"email" => ["The email field is required."]
. Но в вашем случае все видно в ответе.2. Вы сказали, что хотите свой ответ
similar
, поэтому я сделал его похожим. Но не стесняйтесь изменять массив, чтобы возвращать некоторые другие данные. Я отредактировал свой ответ, чтобы показать вам, как изменить код состояния.