【发布时间】:2020-08-22 20:08:06
【问题描述】:
我正在使用 Laravel 7 和 PHP 7.4。我正在使用 ajax 调用提交表单并获得 Json 响应以显示相关错误(如果有)。
我serialize() ajax 调用中的表单。我的问题是,针对我应用验证的每个字段,我都会收到 422 Unprocessable Entity。
令人惊讶的是,如果我的字段不为空,我仍然会收到 required 错误,这很奇怪。
我发现过去遇到过这个问题的人要么已经改用另一种方法,要么通过点击和试用方法找到了解决方案。我的验证是根据 Laravel 文档进行的。
为什么我会收到此错误,正确的解决方案是什么?
刀片视图
<form method="POST" name="register_name" id="register_forms" action="{{ route('verifydata') }}">
@csrf
<input placeholder="Name" id="register_name" type="text" />
<input id="my-register" type="submit" value="Continue">
</form>
Javascript
$("#my-register").click(function(e) {
e.preventDefault();
var _token = $('input[name="_token"]').val();
var data = $('#register_forms').serialize()
$.ajax({
type: "post",
url: "{{ url('verifydata') }}",
data: {
_token: _token,
data: data
},
dataType: 'json',
success: function(data) {
$('#success_message').fadeIn().html(data.message);
},
error: function(err) {
if (err.status == 422) { // when status code is 422, it's a validation issue
console.log(err.responseJSON);
$('#success_message').fadeIn().html(err.responseJSON.message);
console.warn(err.responseJSON.errors);
$.each(err.responseJSON.errors, function(i, error) {
var el = $(document).find('[name="' + i + '"]');
el.after($('<span style="color: red;">' + error[0] + '</span>'));
});
}
}
});
/**Ajax code ends**/
});
控制器
public function verifydata(Request $request)
{
$this->validate($request, [
'name' => 'required', 'string', 'max:255',
]);
$name = $request->register_name;
return response()->json([
'message' => $name
]);
}
【问题讨论】:
-
'name' => 'required', 'string', 'max:255',应该是一个数组'name' => ['required', 'string', 'max:255']laravel.com/docs/7.x/validation -
@kerbh0lz 它仍然在说“422 Unprocessable Entity”。