Obecnie używam tego, aby wyświetlić błędy sprawdzania poprawności poprzez AJAX:błędy walidacji w trybie AJAX
if (data.validation_failed == 1)
{
var arr = data.errors;
$.each(arr, function(index, value)
{
if (value.length != 0)
{
$("#validation-errors").append('<div class="alert alert-error"><strong>'+ value +'</strong><div>');
}
});
$('#ajax-loading').hide();
$("#validation-errors").show();
}
To działa dobrze, robi dokładnie to, czego potrzebuję.
Problemem jest to, co mam zrobić, aby przetransportować błędów z laravel do ajax:
$rules = array(
'name' => 'required',
'password' => 'required'
);
$v = Validator::make(Input::all(), $rules);
if (! $v->passes())
{
$messages = $v->messages();
foreach ($rules as $key => $value)
{
$verrors[$key] = $messages->first($key);
}
if(Request::ajax())
{
$response_values = array(
'validation_failed' => 1,
'errors' => $verrors);
return Response::json($response_values);
}
else
{
return Redirect::to('login')
->with('validation_failed', 1)
->withErrors($v);
}
}
Jeśli chcę mieć nazwy pól jak klucz, muszę iteracyjne $ zasady, ale nawet gdybym nie używaj nazw pól jako klucza, ale muszę powtarzać komunikaty o błędach, aby zbudować $ verrors.
Jak mogę przekonwertować $v->messages()
na odpowiednik $verrors
bez potrzeby powtarzania? Ponieważ Response::json()
oczekuje tablicy zamiast obiektu.
To może być głupi komentarz - ale nie ustawienie kod HTTP 400 oznacza odpowiedź JSON jest całkowicie ignorowany? – Beans
Zależy od "klienta" czytającego JSON. jQuery na przykład obsługuje to doskonale. Nie powoduje sukcesu, ale wywołania zwrotnego błędu, które jest tym, czego potrzebujesz. – DerLola
Korzystając z jQuery, możesz uzyskać błędy za pomocą tego kodu w żądaniu ajax: 'error: function (xhr, status, data) { console.log (xhr.responseJSON.errors); } ' – Yako