通过AJAX发送文件返回'blob'错误

Sending file through AJAX returns 'blob' error

本文关键字:blob 错误 返回 AJAX 文件 通过      更新时间:2023-09-26

我正试图让AJAX请求向我的控制器发送一个文件,然后控制器应该读取发送的文件并将排序后的数组返回到前端,尽管它不起作用,因为我遇到了一个"blob"未设置错误。我搜索了一下,但并没有找到我想要的答案,因此我创建了这个问题。

目前我收到以下类型错误:

'slice' called on an object that does not implement interface Blob.

我试图发送的数据如下:

http://piclair.com/qk8ms(图片是因为我无法直接从浏览器复制数据。)

javascript:

// Click handler for file read
$(document).on('click','#load-csv-btn',function(e){
    e.preventDefault();
    var file = $('#file_upload')[0].files;
    console.log(file);
    readCSV(file);
});

function readCSV(file){
    $.ajax({
        type: "POST",
        url: "ajax/read.php",
        data: {file: file},
        contentType: false
    }).success(function(data){
        console.log(data);
    }).fail(function(){
        console.log('error');
    });
}

PHP处理程序,不过我想这部分与这个问题无关:

<?php
    var_dump($_POST);

我发现有人说,设置processData: falsecontentType: false会让脚本忽略blob要求,但如果我设置了这些参数,我的服务器只会发回一个空数组,我想这并不奇怪,因为我没有处理任何数据。

所以我希望有人知道这个问题的解决方案,能够帮助我。

编辑:

为了明确我尝试过的返回空数组的方法,这里有另一个代码:

$(document).on('click','#load-csv-btn',function(e){
    e.preventDefault();
    var file = $('#file_upload')[0].files[0];
    var fd = new FormData();
    fd.append("csv",file);
    readCSV(fd);
});

function readCSV(file){
    $.ajax({
        type: "POST",
        url: "ajax/read.php",
        data: {file: file},
        contentType: false,
        processData: false
    }).success(function(data){
        console.log(data);
    }).fail(function(){
        console.log('error');
    });
}

就我而言,如果没有外部库,AJAX上传就不容易完成。至少,这是我第一次需要做这件事时学到的。

http://www.9lessons.info/2011/08/ajax-image-upload-without-refreshing.html

本指南非常好,但如果您使用的是较新版本的jQuery,则会有点过时。您可能需要更改一些不推荐使用的功能,例如(.live().on())。

最后,我可以热烈推荐它作为一个良好的开端。多年来,我广泛使用它,并取得了巨大成功。

祝你好运!