【问题标题】:How to upload file in laravel with formData in jquery ajax如何在 jquery ajax 中使用 formData 在 laravel 中上传文件
【发布时间】:2018-05-02 00:20:41
【问题描述】:

我正在使用 laravel 5.4 和 jquery Ajax 上传文件和一些表单数据。

我正在使用下面的代码

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
}

我遇到了错误

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

我该如何解决这个问题?提前感谢您的宝贵时间。

我可以通过使用

在 formData 中获得价值
console.log(formData.get('title'));
console.log(formData.get('doc'));

【问题讨论】:

标签: javascript php jquery laravel file-upload


【解决方案1】:

尝试在您的代码中添加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。

【讨论】:

  • 我的代码没有进入控制器,因为使用processData: false,,我收到“令牌不匹配错误”
  • 在 contentType 之后使用此标头:false headers: { 'X-CSRF-Token': $('meta[name="csrf-token"]').attr('content') },
  • 我试过了,但没有得到titledoc的任何值
【解决方案2】:
<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>

【讨论】:

    【解决方案3】:

    试试这个方法

    $(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){
    
                },
            });
        }));});
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-04-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-01-29
      相关资源
      最近更新 更多