【发布时间】:2018-04-19 02:16:33
【问题描述】:
我想创建一个 ajax 表单验证来验证表单数据并在真正提交表单之前给用户即时反馈。
为此,我在表单提交上添加了一个 javascript 函数:
<form id="x" onsubmit="return dosubmit(this)" action="{{ url('/x') }}" method="POST">
<script>
function dosubmit(form) {
$.ajax({
url: $(form).attr('action'),
type: 'post',
data: $(form).serializeArray()
}).done(function (data) {
form.submit();
}).fail(function (data) {
alert('error');
});
return false;
}
</script>
我自定义了一个表单验证器请求:
class X extends FormRequest
{
public function authorize()
{
return true;
}
public function rules()
{
return [
'name' => 'required',
];
}
}
当我的 ajax 请求失败时,一切正常。我的表单验证器以 json 格式返回错误,我可以将其显示给用户。问题是,当它成功时,它实际上两次发布数据 - 第一次来自 ajax 请求,第二次因为我在 ajax 请求成功后调用 form.submit() 。因为我想在提交后重定向用户,我实际上只希望第二次提交到达控制器。这意味着我必须在验证后停止 ajax 请求。我目前的解决方法是我的控制器中有这样一行:
public function store(X $request)
{
if ($request->ajax()) {
return;
}
// only actual request reaches here
}
这行得通,但它并不漂亮。我不喜欢在我的控制器中包含这条线。如果我可以在我的请求验证器中做类似的事情,我会很高兴,但我找不到从那里验证后返回的好方法。有什么想法我该如何做到这一点?
【问题讨论】:
标签: javascript php laravel laravel-5 laravel-5.4