Ajax中的TokenMismatchException在laravel中使用令牌传递发布请求

时间:2017-07-11 13:09:24

标签: jquery ajax laravel

我正在使用ajax提交表单数据,但在传递令牌时我收到此令牌不匹配错误。 这是我的代码片段:

var _csrfToken = $('meta[name=token]').attr('content');
var link = $('meta[name=url]').attr('content');


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

$('#upload_form').submit(function(e)
{
    e.preventDefault();
    var title = $('#title').val();
    var designation = $('#position').val();
    var category = $('#category').val();
    var azimaData = {
        name: title,
        designation: designation,
        category: category,
         _token: _csrfToken
    };

    console.log(azimaData);

    $.ajax({
        method: 'POST',
        url: link + '/@dashboard@/galleryImage/add_image',
        data: azimaData,
        //use contentType, processData for sure.
        contentType: false,
        processData: false,

        success: function(msg) {

            if(msg.status == success)
            {
                alert(msg.msg);
            }
            else
            {
                alert(msg.msg);
            }
        },
        error: function(xhr) {

            console.log(xhr);
        }
    });

});

其他Ajax请求在令牌问题上正常工作。我在哪里出错了?

3 个答案:

答案 0 :(得分:0)

在将contentType和processData选项设置为false之后,您无法以对象形式发送数据。因此,在这种情况下,您可以通过序列化表单或创建新的FormData实例并手动将数据附加到其中来发送数据。

我已经编辑了你的代码。并使用FormData与令牌一起发送数据。

ls -ltr *xyz*

答案 1 :(得分:0)

从您的ajax请求中删除contentType: falseprocessData:false,尝试使用ajax请求。

$.ajax({
    method: 'POST',
    url: link + '/@dashboard@/galleryImage/add_image',
    data: azimaData,
    success: function(msg) {
        if(msg.status == success) {
            alert(msg.msg);
        } else {
            alert(msg.msg);
        }
    },
    error: function(xhr) {
        console.log(xhr);
    }
});

jQuery AJAX documentation

答案 2 :(得分:-1)

更改您的meta name。它应该是这样的

var _csrfToken = $('meta[name=_token]').attr('content');