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 

这是有无文件时,分别调用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表单提交及后台处理简单的应用

以上就是Ajax表单异步上传文件实例代码的详细内容,更多请关注【创想鸟】其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2758797.html

(0)
上一篇 2025年3月8日 08:17:48
下一篇 2025年2月26日 10:38:52

AD推荐 黄金广告位招租... 更多推荐

相关推荐

  • IE下Ajax提交乱码的快速解决方法

    下面我就为大家带来一篇ie下ajax提交乱码的快速解决方法。现在就分享给大家,也给大家做个参考。 哈哈,试了这么多还是encodeURIComponent管用啊!!!! 在汉字的位置加个保护措施:encodeURIComponent(par…

    编程技术 2025年3月8日
    200
  • ajax设置async校验用户名是否存在的实现方法

    下面我就为大家带来一篇ajax设置async校验用户名是否存在的实现方法。现在就分享给大家,也给大家做个参考。 新增一个用户的时候,需要判断这个手机号码是否存在,最开始的想法很简单在textbox上设置一个onmouseout事件,在IE下…

    2025年3月8日
    200
  • Ajax获取数据然后显示在页面的实现方法

    下面我就为大家带来一篇ajax获取数据然后显示在页面的实现方法。现在就分享给大家,也给大家做个参考。 主要功能流程介绍 循环获取列表数据 点击列表数据进入详情页 点击报名参加弹出报名成功提示框 点击提示框中的确定按钮,跳回列表页 代码实现流…

    2025年3月8日
    200
  • ajax同步验证单号是否存在的方法

    这篇文章主要介绍了ajax同步验证单号是否存在的方法,涉及基于ajax的数据交互相关操作技巧,需要的朋友可以参考下 本文实例讲述了ajax同步验证单号是否存在的方法。分享给大家供大家参考,具体如下: //保存前执行的方法,ajax同步调用后…

    编程技术 2025年3月8日
    200
  • Ajax 异步加载解析

    这篇文章主要为大家详细介绍了ajax 异步加载,什么是ajax 异步加载,如何实现ajax 异步加载,感兴趣的小伙伴们可以参考一下 AJAX (Asynchronous JavaScript and XML,异步的 JavaScript 和…

    2025年3月8日
    200
  • Ajax技术组成与核心原理分析

    这篇文章主要介绍了javascript性能优化之函数节流(throttle)与函数去抖(debounce),感兴趣的小伙伴们可以参考一下 本文主要为大家分析了Ajax技术组成原理,供大家参考,具体内容如下 1、Ajax特点:局部刷新、提高用…

    编程技术 2025年3月8日
    200
  • 关于Ajax技术中servlet末尾的输出流

    这篇文章主要介绍了关于ajax技术中servlet末尾的输出流的相关资料,非常不错,具有参考借鉴价值,需要的朋友可以参考下 Ajax的服务器端用PrintWriter out=resp.getWriter()来响应数据的时候,out.pri…

    编程技术 2025年3月8日
    200
  • 利用ajax实现异步刷新请求

    ajax刷新是一种用户体验良好的刷新方式,这篇文章主要介绍了ajax异步请求刷新,感兴趣的小伙伴们可以参考一下 在网站刷新的方法中,ajax刷新是一种用户体验良好的刷新方式,在结合ssh等流行的框架!最为常用了!下面就是常用一个ajax刷新…

    编程技术 2025年3月8日
    200
  • 通过Ajax方式上传文件使用FormData进行Ajax请求

    这篇文章主要介绍了通过ajax方式上传文件使用formdata进行ajax请求的相关资料,需要的朋友可以参考下 通过传统的form表单提交的方式上传文件: Html代码  登录后复制登录后复制登录后复制 不过传统的form表单提交会导致页面…

    编程技术 2025年3月8日
    200
  • Ajax请求成功后打开新窗口地址

    这篇文章主要介绍了ajax请求成功后打开新窗口地址的相关资料,非常不错,具有参考借鉴价值,需要的朋友可以参考下 废话不多说,关键代码如下所示: jQuery.ajax({“type”:”post”,”url”:”http://www.bai…

    编程技术 2025年3月8日
    200

发表回复

登录后才能评论