介绍
小编给大家分享一下FormData + Ajax怎么实现上传进度监控,希望大家阅读完这篇文章之后都有所收获、下面让我们一起去探讨吧!
<强>什么是FormData ? 强>
FormData对象可以组装一组用XMLHttpRequest发送请求的键/值对。它可以更灵活方便的发送表单数据,因为可以独立于表单使用。如果你把表单的编码类型设置为多部分/格式,则通过FormData传输的数据格式和表单通过提交()方法传输的数据格式相同,
<>强如何创建一个FormData对象强>
你可以自己创建一个FormData对象,然后通过调用它的append()方法添加字段,就像这样:
//实例化一个FormData对象 var formData =, new FormData (); formData.append (“username",,“Groucho"); formData.append (“userid",, 123456),,//,数字,123456,会被立即转换成字符串,“123456”;//,HTML上的,文件类型输入(type=文件)的文件框,由用户选择 formData.append (“userfile", fileInputElement.files [0]);//,JavaScript file-like 对象 var content =, & # 39; & lt; a id=癮"祝辞& lt; b id=癰"祝辞嘿! & lt;/b> & lt;/a> & # 39;,,//,新文件的正文…… var blob =, new Blob([内容],,{,类型:“文本/xml"}); formData.append (“webmasterfile", blob);
注意:字段“userfile”和“webmasterfile”都包含一个文件。字段“标识”是数字类型,它将被FormData.append()方法转换成字符串类型(FormData对象的字段类型可以是Blob,文件,或者字符串:如果它的字段类型不是Blob也不是文件,则会被转换成字符串类型。
<强>使用jQuery Ajax的方法发送FormData数据强>
//记录当前时间 .getTime var 时间=new 日期()();//记录当前进度 var percentage =零;//记录当前上传速度 var 速度=零;//记录已上传文件字节大小 var 加载=0; . ajax({美元 ,url: & # 39; url # 39; 类型:大敌;“POST", ,数据:formData, ,contentType:假的,,//,必须,不设置内容类型 ,processData:假的,,//,必须,不处理数据 ,xhr: function xhr (), {//才能获取原生的xhr对象 var 才能;xhr =, .ajaxSettings.xhr美元(); if 才能;(xhr.upload), { ,,//添加,progress 事件监听 ,,xhr.upload.addEventListener(& # 39;进步# 39;,,function (e), { ,,,var nowDate =, new 日期().getTime (); ,,,//每一秒刷新一次状态 ,,,if (nowDate 作用;time 祝辞=,1000),{ ,,,,//已上传文件字节数/总字节数 ,,,,percentage =,方法(时间/e.loaded e.total *, 100); ,,,,//当前已传大小(字节数)- - -一秒前已传文件大小(字节数) ,,,,velocity =, (e.loaded 安康;加载),/,1024; ,,,,if (percentage 祝辞=,99),{ ,,,,,美元(“.hintText") . html(& # 39;服务端正在解析,请稍后& # 39;); ,,,,},{else ,,,,,//修改上次记录时间及数据大小 ,,,,,time =, nowDate; ,,,,,loaded =, e.loaded; ,,,,} ,,,},{else ,,,,返回; ,,,} ,,,},假); ,,} return 才能,xhr; }, 成功,成功:function (反应),{//才能成功回调,,, }, 错误:大敌;function 错误(错误),{//才能失败回调,,,, ,} });
看完了这篇文章,相信你对“FormData + Ajax怎么实现上传进度监控”有了一定的了解,如果想了解更多相关知识,欢迎关注行业资讯频道,感谢各位的阅读!