Laravel 5.5:Ajax无法正常工作

时间:2017-09-26 23:27:13

标签: jquery ajax laravel

我和他之间发生了一个奇怪的问题。我无法弄清楚。

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警报未显示错误。

2 个答案:

答案 0 :(得分:0)

你必须停止写这样的代码

    $("#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.
        }
    });

答案 1 :(得分:0)

您是否在元标记上设置了csrf-token?

<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,
        ... : ...,