Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/290.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Laravel 5-具有CSRF保护的AJAX图像上传_Php_Jquery_Ajax_Laravel 5 - Fatal编程技术网

Php Laravel 5-具有CSRF保护的AJAX图像上传

Php Laravel 5-具有CSRF保护的AJAX图像上传,php,jquery,ajax,laravel-5,Php,Jquery,Ajax,Laravel 5,我设置了一个表单来上传图像。我以前使用过DropZone.js,它工作得很好,在ajax调用中发送了CSRF令牌。服务器端的一切都很好,但当尝试在没有DropZone的情况下执行此操作时,我会遇到令牌不匹配错误 这是我的AJAX调用: $(document).on('submit', ".hidden-image-upload", function(e){ e.preventDefault(); $.ajax({ url:'/project/uploadI

我设置了一个表单来上传图像。我以前使用过DropZone.js,它工作得很好,在ajax调用中发送了CSRF令牌。服务器端的一切都很好,但当尝试在没有DropZone的情况下执行此操作时,我会遇到令牌不匹配错误

这是我的AJAX调用:

    $(document).on('submit', ".hidden-image-upload", function(e){
    e.preventDefault();
    $.ajax({
        url:'/project/uploadImage',
        data:{
            data:new FormData($("#upload_form")[0]),
        },
        dataType:'json',
        async:false,
        type:'post',
        processData: false,
        contentType: false,
        success:function(response){
            console.log(response);
        },
    });
});
这是HTML:

<form method="POST" action="http://localhost/project/create" accept-charset="UTF-8" class="hidden-image-upload">
    <input name="_token" type="hidden" value="5lgtt8AgbeF3lprptj8HNXVPceRhoJbqBeErBI1k">
    <input class="cover-image-upload-button" name="file" type="file">
</form>


如何整理我的AJAX调用/Laravel以使其协同工作?

试试这个。您还必须将您的CSRF令牌与FormData一起传递:

$(document).on('submit', ".hidden-image-upload", function(e){
e.preventDefault();

var data = new FormData($("#upload_form")[0]);
    data.append('_token', $('input[name="token"]').val());

$.ajax({
    url:'/project/uploadImage',
    data:{
        data: data,
    },
    dataType:'json',
    async:false,
    type:'post',
    processData: false,
    contentType: false,
    success:function(response){
        console.log(response);
    },
});

}))

您可以使用$.ajax在头中发送令牌

$(document).on('submit', ".hidden-image-upload", function(e){
    e.preventDefault();
    $.ajax({
        url:'/project/uploadImage',
        data:{
            data:new FormData($("#upload_form")[0]),
        },
        headers: {
           'X-CSRF-Token': $('form.hidden-image-upload [name="_token"]').val()
        }
        dataType:'json',
        async:false,
        type:'post',
        processData: false,
        contentType: false,
        success:function(response){
            console.log(response);
        },
    });
});

在最坏的情况下,禁用该路由中的CSRF检查,只需将该路由添加到数组$app/Http/Middleware/VerifyCsrfToken.php中即可。您的CSRF令牌在哪里?请尝试我的答案。如果有效,请不要这样做。相反,请遵循文档中列出的指导原则,并设置
X-CSRF-TOKEN
标题。