Ajax如何实现表单异步上传文件
发表于:2025-02-20 作者:千家信息网编辑
千家信息网最后更新 2025年02月20日,这篇文章主要介绍Ajax如何实现表单异步上传文件,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!1.起因做前台页面时,需要调用WebAPI的Post请求,发送一些字段和文件(相当
千家信息网最后更新 2025年02月20日Ajax如何实现表单异步上传文件
这篇文章主要介绍Ajax如何实现表单异步上传文件,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!
1.起因
做前台页面时,需要调用WebAPI的Post请求,发送一些字段和文件(相当于把表单通过ajax异步发送出去,得到返回结果),然后得到返回值判断是否成功。
2.尝试
先是尝试了一下 "jQuery Form Plugin" ,这玩意就是的巨大的坑,实现他和jquery1.9.2兼容性就不是太好,好不容易把$.browser的问题解决了,发现用他上传文件得不到返回值。
$("#view").submit($("#view").ajaxSubmit({type: "post",url: "../api/Article/Add",dataType: "json",success: function (msg) {console.log(msg);},error: function (msg) {$("#resultBox").html("连接服务器失败");console.log(msg);}}));
比如上面的代码,不过怎么配置,只要上传了文件,success里面返回的msg一定是null(chromium浏览器下),但实际是有返回值的,而且没有文件时也是正常的。更可怕的是IE/EDGE下提示下载那个Json返回值。
翻了一下jquery.form.js的源代码,发现他是用Iframe实现的伪Ajax,不清真,Pass!
// are there files to upload?var files = $('input:file', this).fieldValue();var found = false;for (var j=0; j < files.length; j++)if (files[j]) found = true;if (options.iframe || found) // options.iframe allows user to force iframe modefileUpload();else$.ajax(options);
这是有无文件时,分别调用2个不同的函数。
3.解决方案
经过多反调查,发现xhr(XMLHttpRequest)是个好东西。经过测试主流浏览器和手机浏览器都支持这个东西。下面介绍一下在jquery/zepto的ajax 获取原生XMLHttpRequest 对象上传表单(文件)的方法。参考文章:https://www.jb51.net/article/91267.htm
function AjaxForm(formID, options) {var form = $(formID);//将form对象直接作为参数 new FormData对象var formData = new FormData(form[0]);$("input[type='file']").forEach(function (item, i) {//获取file对象 即相当于可以直接post的$_FILES数据var domFile = $(item)[0].files[0];//追加file 对象formData.append('file', domFile);})if (!options)options = {};options.url = options.url ? options.url : form.attr("action");options.type = options.type ? options.type : form.attr("method");options.data = formData;options.processData = false; // tell jQuery not to process the dataoptions.contentType = false; // tell jQuery not to set contentTypeoptions.xhr = options.xhr ? options.xhr : function () {//这是关键 获取原生的xhr对象 做以前做的所有事情var xhr = $.ajaxSettings.xhr();xhr.upload.onload = function () {console.log("onload");}xhr.upload.onprogress = function (ev) {if (ev.lengthComputable) {var percent = 100 * ev.loaded / ev.total;console.log(percent, ev)}}return xhr;};options.success = options.success ? options.success : function (data) {alert(data)};$.ajax(options);}//调用$("#sub").click(function (e) {AjaxForm("#myForm");});
以上是"Ajax如何实现表单异步上传文件"这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注行业资讯频道!
文件
对象
表单
浏览器
浏览
东西
内容
篇文章
这是
参考
尝试
不同
可怕
巨大
主流
事情
代码
价值
关键
兴趣
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
数据库二次开源
闪耀计划软件开发
青矩互联网科技
厦门智趣云互联网科技
qq离线文件 服务器
ftp服务器应该大写还是小写
et200sp服务器模块放哪里
关系数据库实训心得体会
网络安全企业网赛事
瑞思国际集团有网络技术部门吗
如何一个域名解析两个服务器
铁路网络安全人员编制要求
网络安全宣传文章1200
用开源软件开发8051
上海尼集互联网科技有限公司
泰安智慧团建软件开发哪儿好
大数据库技术怎么样
服务器选购组网
浑源口碑好的网络安全常见问题
军区网络安全检查个人证件
郑州云时代互联网科技有限公司
四川超频服务器销售价格
服务器工程师
河北网络技术公司有限公司
dell服务器硬盘安装
辽宁优质软件开发
固件软件开发工程师职责
辽宁数据网络技术价目表
电信邮箱无法连接服务器
大专数据库技术画图