Hiện nay tôi sử dụng để hiển thị lỗi xác nhận qua ajax:lỗi Validation trong chế độ 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();
}
Nó hoạt động tốt, thực hiện chính xác những gì tôi cần.
Vấn đề là những gì tôi phải làm gì để vận chuyển các lỗi từ laravel để 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);
}
}
Nếu tôi muốn có các tên trường như chìa khóa, tôi phải lặp $ quy tắc, nhưng ngay cả khi tôi không sử dụng tên trường là khóa, nhưng tôi phải lặp lại thông báo lỗi để tạo $ verrors.
Làm cách nào để chuyển đổi $v->messages()
thành tương đương với $verrors
mà không cần lặp lại? Vì Response::json()
đang mong đợi một mảng thay vì một đối tượng.
Đây có thể là một lời nhận xét ngu ngốc - nhưng không thiết lập mã http đến 400 có nghĩa là phản ứng JSON là hoàn toàn bị bỏ qua? – Beans
Phụ thuộc vào 'khách hàng' đang đọc JSON. jQuery ví dụ xử lý này hoàn toàn tốt đẹp. Nó không kích hoạt thành công, nhưng gọi lại lỗi, đó là những gì bạn muốn. – DerLola
Sử dụng jQuery, bạn có thể gặp lỗi khi sử dụng mã này trong yêu cầu ajax: 'error: function (xhr, status, data) { console.log (xhr.responseJSON.errors); } ' – Yako