Laravel 5.6 Ajax请求返回HttpException

时间:2018-08-22 06:57:49

标签: ajax laravel

我无法通过此错误,我尝试在laravel中执行ajax请求,但我无法通过此错误:

{message: "", exception: "Symfony\Component\HttpKernel\Exception\HttpException",…}

这到底是什么意思? CSRF-TOKEN 令牌错误或?

ajax请求:

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

$("#send").click(function(e){

        e.preventDefault();
        var id = 5;

        $.ajax({
            url: '{{url("fly")}}',
            type:'POST',
            data:{id:id},
            success:function(data){
                console.log('Yes' + data);
            }
        });

    });

有什么主意吗?

3 个答案:

答案 0 :(得分:2)

您的问题是CSRF令牌

您已经在ajax标头中添加了CSRf令牌,但是在meta中尚未指定它。 在布局文件中添加crsf元

<meta name="csrf-token" content="{{ csrf_token() }}">

如果您检查浏览器网络控制台,则如果csrf令牌未正确传递,则会看到419错误

Request URL: http://127.0.0.1:8000/fly
Request Method: POST
Status Code: 419 unknown status
Remote Address: 127.0.0.1:8000
Referrer Policy: no-referrer-when-downgrade

更新了标头,如下所示,因为标头令牌未设置在文档就绪或单击发送中

$("#send").click(function(e){

        e.preventDefault();
        var id = 5;

        $.ajax({
headers: {
            'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
        },
            url: '{{url("fly")}}',
            type:'POST',
            data:{id:id},
            success:function(data){
                console.log('Yes' + data);
            }
        });

    });

答案 1 :(得分:0)

在form标签内添加以下CSRF字段将解决此问题:

{{ csrf_field() }}

答案 2 :(得分:-1)

我昨天已经告诉你这样做:

$("#send").click(function(e){

    e.preventDefault();
    var id = 5;

    $.ajax({
        url: '{{url("fly")}}',
        type:'POST',
        data:{'id':id,'_token': "{{ csrf_token() }}"},
        success:function(data){
            console.log('Yes' + data);
        }
    });

});