Laravel 5.5:阿贾克斯不工作
问题描述:
我发生了一个奇怪的问题&我无法弄清楚。Laravel 5.5:阿贾克斯不工作
Ajax
表格提交不起作用Laravel 5.5
虽然它在Laravel 5.2
的作品。我的意思是相同的代码适用于Laravel 5.2
,但不适用于Laravel 5.5
。我附上我的代码,以便您能理解。
Html:
<form action="{{ url('/register') }}" method="POST" id="userRegistrationForm">
...........
...........
<button type="submit">Register</button>
{{ csrf_field() }}
</form>
JS:
$('#userRegistrationForm').validate({
rules:{
......
},
messages:{
......
},
submitHandler: function(form){
/* alert('Submit success!') */ /* It works, that means this function works properly */
/* But this not works */
$.ajax({
url: form.action,
type: form.method,
data: $(form).serialize(),
success: function(response){
location.reload();
},
error: function(response){
alert('error spotted');
}
});
}
});
当我从提交注册,jQuery验证工作。但是表单默认提交模式,而不是Ajax。错误不会通过Javascript警报显示。
答
您必须停止阻止写你这样的代码
$("#userRegistrationForm").submit(function(e) {
e.preventDefault();
}).validate({
messages:{..},
rules: {...},
submitHandler: function(form) {
$.ajaxSetup({
headers: {
'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
}
});
$.ajax({
url: form.action,
type: form.method,
data: $(form).serialize(),
success: function(response){
location.reload();
},
error: function(response){
alert('error spotted');
}
});
return false; //This doesn't prevent the form from submitting.
}
});
答
你设置你的meta标签CSRF令牌?
<meta name="csrf-token" content="{{ csrf_token() }}">
您所设定的令牌后,您需要设置标题为您的Ajax请求,所以你只需要你的Ajax请求之前,下面的代码添加。
$.ajaxSetup({
headers: {
'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
}
});
$.ajax({
url: form.action,
type: form.method,
... : ...,