Javascript 如何在jqueryajax中使用formData在laravel中上传文件

Javascript 如何在jqueryajax中使用formData在laravel中上传文件,javascript,php,jquery,laravel,file-upload,Javascript,Php,Jquery,Laravel,File Upload,我正在使用Laravel5.4和jQueryAjax上传文件和一些表单数据 我正在使用下面的代码 function submitDocument(){ var formData = new FormData(); // Currently empty var _token = $("#_token").val().trim(); formData.append('title', $("#title").val()); formData.append("doc",$

我正在使用Laravel5.4和jQueryAjax上传文件和一些表单数据

我正在使用下面的代码

function submitDocument(){
    var formData = new FormData(); // Currently empty
    var _token = $("#_token").val().trim();
    formData.append('title', $("#title").val());
    formData.append("doc",$("#doc")[0].files[0]);
    $.ajax({
      url: "documents",
      method: "post",
      data:{_token,formData},
    }).done(function(data) {

    });
    return false;// Not to submit page
}
我得到了一个错误

未捕获类型错误:非法调用

我怎样才能解决这个问题?提前感谢您抽出时间

我可以通过使用

console.log(formData.get('title'));
console.log(formData.get('doc'));

尝试在代码中添加
processData:false、contentType:false

将脚本替换为以下内容:

function submitDocument(){
var formData = new FormData(); // Currently empty
var _token = $("#_token").val().trim();
formData.append('title', $("#title").val());
formData.append("doc",$("#doc")[0].files[0]);
$.ajax({
  url: "documents",
  method: "post",
  data:{_token,formData},
  cache : false,
  processData: false,
  contentType: false
}).done(function(data) {

});
return false;// Not to submit page
}
默认情况下,作为对象传递到数据选项的数据将被处理并转换为查询字符串,符合默认内容类型“application/x-www-form-urlencoded”。如果要发送DOMDocument或其他未处理的数据,请将此选项设置为false。

请尝试这种方式

$(document).ready(function (){
$("#form").on('submit',(function(e){
        e.preventDefault();
        var formdata = new FormData(this);
        var _token = $("#_token").val().trim();
        formData.append('title', $("#title").val());
        formData.append("doc",$("#doc")[0].files[0]);
        $.ajax({
            url: "/site/url",
            type: "POST",
            data:{token:_token,formData},
            contentType: false,
            cache: false,
            processData:false,
            success: function(data){

            },
        });
    }));});

$(文档).ready(函数(){
var url=“{url('/admin/file')}}”;
变量选项={
键入:“post”,
url:url,
标题:{'X-CSRF-TOKEN':{{{CSRF_TOKEN()}}}},
数据类型:“doc”,
cache:false,
contentType:false,
processData:false,
成功:功能(数据){
警报(“正常”);
},
错误:函数(数据){
警报(“错误”);
}
}; 
$('#save')。在('click',function(){
$(“#表格”).ajaxSubmit(选项);
返回false;
}); 
}); 

您是否尝试过在formData对象中添加_标记值?@gbalduzzi:是的,我尝试过,没有成功。似乎是重复的:我的代码不会发送到控制器,因为使用了
processData:false,
我收到了“标记不匹配错误”,请在contentType:false
标头之后使用此标头:{'X-CSRF-Token':$('meta[name=“CSRF-Token”]').attr('content')},
我尝试了这个,但没有得到
title
doc
<script>
$(document).ready(function() {
    var url = "{{ url('/admin/file') }}"; 
    var options = { 
            type: 'post',
            url: url,       
            headers: {'X-CSRF-TOKEN': '{{ csrf_token() }}'},
            dataType: 'doc',
            cache: false,
            contentType: false,
            processData: false,
            success: function (data) {
                alert('Ok');
            },
            error: function (data) {
                alert('Error');
            }
    }; 
    $('#save').on('click', function() { 
        $("#form").ajaxSubmit(options); 
        return false; 
    }); 
}); 
</script>