Как сгенерировать ответ, как показано ниже, в Laravel 5.8

#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 , поэтому я сделал его похожим. Но не стесняйтесь изменять массив, чтобы возвращать некоторые другие данные. Я отредактировал свой ответ, чтобы показать вам, как изменить код состояния.