目前我使用这个来通过 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()
需要的是数组而不是对象。
9条答案
按热度按时间6mzjoqzu1#
最简单的方法是利用验证器的
MessageBag
对象,可以这样做:这将给予如下JSON响应:
of1yzvn42#
在 AJAX 响应中尝试类似于
slwdgvem3#
为此你只需要做以下事情
控制器:
视图:
您可以为每个
validation
字段构建一个<span>
标签,其中id作为字段名,后缀为_error
,因此它将使用上述逻辑显示验证错误,如下所示,希望有帮助:)
1tu0hz3e4#
试试下面的代码,效果很好:
t98cgbkg5#
我在laravel 5.5中使用了这种方法
Html代码
控制器验证代码
在javascript中
5us2dqdw6#
在使用 AJAX 请求时,有一种更好的方法来处理验证错误。
像往常一样创建一个Request类,例如
UploadFileAjaxRequest
:在控制器方法中使用它:
如果有任何错误,它将返回一个错误数组,您可以在JS中使用:
mzaanser7#
我自己做的,试试这个希望对你渲染后的相关字段错误有帮助。
iyr7buue8#
顺便说一下,我使用的是Laravel 5.1,但我认为它的基本原理应该适用于其他版本。Laravel会自动返回验证错误响应。您可以在控制器中执行以下操作:
然后在你的javascript中(我在这里使用jQuery):
如果你看一下控制台上的输出,你很快就会知道如何从Laravel返回的响应中获取你想要的任何东西。在那个响应中,错误消息是以键-值对的形式出现在json中的,其中键是验证失败的字段的名称,在我的例子中是“email”。记住要确保 AJAX 路由是在routes.php文件中设置的,并且方法(get/post)与javascript中的方法匹配。
ecfdbz9o9#
我想分享一下我的成功经验:
在后端我做了一些类似的第一个答案在这篇文章中指出:
(In“$arrayValidate”我使用正则表达式进行验证,如果您不知道它们是如何工作的,请发短信给我,我很乐意为您解释)
在前端使用Javascript,我们获得验证的响应,准备处理: