目前,我使用它通过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();
}
它工作得很好,完全符合我的需要。
问题是我必须做些什么才能将错误从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);
}
}
如果我想让字段名作为键,我必须迭代$rules,但是即使我不使用字段名作为键,我也必须迭代错误消息来构造$verrors。
我如何在不需要迭代的情况下将$v->messages()
转换为$verrors
的等价物?因为Response::json()
需要的是数组而不是对象。
发布于 2013-06-14 06:37:54
最简单的方法是利用验证器的MessageBag
对象。这可以像这样完成:
// Setup the validator
$rules = array('username' => 'required|email', 'password' => 'required');
$validator = Validator::make(Input::all(), $rules);
// Validate the input and return correct response
if ($validator->fails())
{
return Response::json(array(
'success' => false,
'errors' => $validator->getMessageBag()->toArray()
), 400); // 400 being the HTTP code for an invalid request.
}
return Response::json(array('success' => true), 200);
这将为您提供如下JSON响应:
{
"success": false,
"errors": {
"username": [
"The username field is required."
],
"password": [
"The password field is required."
]
}
}
发布于 2014-02-09 10:16:28
在ajax响应中,尝试类似于
.fail(function( data ) {
var response = JSON.parse(data.responseText);
var errorString = '<ul>';
$.each( response.errors, function( key, value) {
errorString += '<li>' + value + '</li>';
});
errorString += '</ul>';
发布于 2019-03-25 18:36:29
试试这段代码。它工作得很好:
$.ajaxSetup({
headers: {'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')}
});
$("#sendData").submit(function(e)
{
e.preventDefault();
var formData = new FormData(jQuery('#sendData')[0]);
$.ajax({
type:'POST',
url:"/your(URL)",
data:formData,
contentType: false,
processData: false,
success:function(data)
{
alert(data);
},
error: function(xhr, status, error)
{
$.each(xhr.responseJSON.errors, function (key, item)
{
$("#errors").append("<li class='alert alert-danger'>"+item+"</li>")
});
}
});
});
https://stackoverflow.com/questions/17097797
复制相似问题