1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > Ajax表单异步上传文件实例代码

Ajax表单异步上传文件实例代码

时间:2021-09-22 16:16:05

相关推荐

Ajax表单异步上传文件实例代码

web前端|js教程

Ajax,文件,上传

web前端-js教程

这篇文章主要介绍了Ajax表单异步上传文件实例代码(包括文件域),非常不错,具有参考借鉴价值,感兴趣的朋友一起看下吧

php做简单网页源码,ubuntu 默认搜索路径,高铁能带爬虫,php scm,莱山seo排名lzw

1.起因

ghost 一键还原 源码,vscode屏蔽快捷键,ubuntu中sed,tomcat部署项目重名,体育资讯 爬虫,as3 php后台交互,seo营销技巧培训班推广,一键发布网站源码,手机app静态页面模板lzw

做前台页面时,需要调用WebAPI的Post请求,发送一些字段和文件(相当于把表单通过ajax异步发送出去,得到返回结果),然后得到返回值判断是否成功。

android 暴风影音源码,vscode加载系统头文件,mysql 版本ubuntu,tomcat全局屏蔽错误,腾讯发布爬虫,php数组求和函数,广州seo广告怎么样,网站源码 本周之星,自适应html模板手机端修改lzw

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 对象上传表单(文件)的方法。

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实现省市区三级级联

基于Ajax表单提交及后台处理简单的应用

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。