我的Ajax不断返回419和500错误状态

时间:2019-04-21 17:39:02

标签: javascript ajax laravel laravel-5

我正在制作一个由Ajax调用的表单,并尝试将表单配置为使用Ajax提交。该表格应该通过route('ruangrapat.store)提交数据。但是每次我提交表单时,当我在Ajax中不使用csrf_token()以及在Ajax中使用csrf_token()时,它将返回419状态。它总是返回500内部服务器错误。有人可以帮我解决这个问题吗?我已经看了几乎所有在互联网上找到的讨论,但是仍然没有答案。

也许我错过了代码中的一些重要内容。请查看我的代码。

//ajax
$(document).ready(function(){
             $('#form-ruangrapat').on('submit',function(e){

            e.preventDefault();
             var formdata=$('#form-ruangrapat').serialize();//should i do this??
//if i should take the value of inputs 1 by 1,please show me the proper way

             var token="{!!csrf_token()!!}"
            $.ajax({ 
                url:"{{route('ruangrapat.store')}}",
                data: {formData:formdata,_token:token},
                type:'post',
                success:function(result){
                    $('#result').html(result);
                }
            });
        });
        });


//controller
public function store(Request $request)
    {
        $data = new Ruangrapat();
       ...
        $data->contact = $request->get('contact');
        $data->save();
        return view('ajax-result.ruangrapat.index')->with('status', 'Ruang rapat baru berhasil ditambahkan!');
//is this return value correct??

    }

//route
Route::resource('ruangrapat', 'RuangrapatController');

2 个答案:

答案 0 :(得分:0)

我遇到了同样的问题,419与csrf令牌匹配,当您修复它时,请求转到服务器,因此,内部服务器错误500表示存储时出现问题,因此请重新看一下存储功能在控制器中,并确保该功能中的所有过程均正确。

答案 1 :(得分:0)

首次推荐

要发出任何ajax请求,建议将CSRF令牌添加到ajax请求的标头中

$.ajaxSetup({
    headers: {
        'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
    }
});

As advised by laravel documentation

第二推荐

要查看发送的ajax请求,我建议让控制器将数据返回给您并通过Web控制台查看。

$(document).ready(function(){
    $('#form-ruangrapat').on('submit',function(e){
        e.preventDefault();
        var formdata=$('#form-ruangrapat').serialize();
        var token="{!!csrf_token()!!}";
        $.ajax({
            url:"{{route('ruangrapat.store')}}",
            data: {formData:formdata,_token:token},
            type:'post',
            dataType:'JSON',
            //You can use sucess or done, personally i like more done
        }).done(function (data) {
            console.log(data)
        });
    });
});

然后在控制器中

public function store(Request $request)
{
    return response()->json($request->input());
}

其他选项是使用浏览器的网络监视器并查看发送的变量。