Ajax文件上传功能de实现

在进行文件上传的时候,我们往往会使用表单提交的方式:

<form action='....'>
    <input type='file' name='file' />
    <input type='submit' value='上传'>
</form>

但是给表单提交添加回调函数比较困难,所以在这一次提交时,我使用了Ajax进行提交,在其中遇见了一些问题,在这一做一下小小的分享。

刚开始我是这样写的:

var file=$('#file').files[0];
console.log(file);
$.ajax({
    type: "post",
    url: "提交地址",
    data: {
        'file':file
    },
    dataType: "text",
    success: function (data) {
         请求成功回调函数               
    },
    error: function (data) {
        请求失败执行函数
    }
});

在代码执行的时候,console.log()确实帮我打印出了这个文件,也正是我想要上传的文件,相应的信息也正确无误,但是在文件的上传过程中,网页控制台报错:

控制台报错

也就是说上传的姿势不对,后来去查了相关的资料,得出了最终的解决方案:

$('#file').change(function () {
    var file =$('#file').files[0];
    var formData = new FormData();
    formData.append('year',select);
    formData.append('file',$('#file').files[0]);
    $.ajax({
        type: "post",
        url:请求地址,
        processData:false,
        data:formData,
        contentType:false,
        async:false,
        mimeType:"multipart/form-data",
        dataType: "json",
        success: function (data){
            //请求成功回调函数              
        }
        error: function(data){
            //请求失败执行函数
        }
    })
});

其中的最为重要的就是:

processData:false,

contentType:false,

mimeType:"multipart/form-data",

 这三个是必不可少的,也是文件上传与其他请求 不一样的原因

processData:false

默认值为true,如果你要上传文档,当然就不希望能这么发送了,必须得设置processData=false,且以POST方式发送才行。

contentType:false

Content-Type,内容类型,用于定义网络文件的类型和网页的编码,决定文件接收方将以什么形式、什么编码读取这个文件,默认值为true。

mimeType:"multipart/form-data"

在浏览器中显示的内容有 HTML、有 XML、有 GIF、还有 Flash ……那么,浏览器是如何区分它们,决定什么内容用什么形式来显示呢?答案是 MIME Type,也就是该资源的媒体类型。在此我们将其设置为multipart/form-data,通过post组合,实现文件的上传。

async:false

文件上传需要时间,所以请求需要异步

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ღ故里᭄ꦿ࿐

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值