Ajax操作表单异步上传文件

这次给大家带来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 对象上传表单(文件)的方法。参考文章:http://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+mysq实现省市区三级联动列表

Ajax传输Json和xml数据步奏详解(附代码)

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

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

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

(0)
上一篇 2025年3月8日 14:30:17
下一篇 2025年2月17日 22:44:50

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

相关推荐

  • IE下的Ajax提交乱码如何处理

    这次给大家带来IE下的Ajax提交乱码如何处理,处理IE下Ajax提交乱码的注意事项有哪些,下面就是实战案例,一起来看一下。 哈哈,试了这么多还是encodeURIComponent管用啊!!!! 在汉字的位置加个保护措施:encodeUR…

    编程技术 2025年3月8日
    200
  • 使用ajax校验注册的用户名是否存在

    这次给大家带来使用ajax校验注册的用户名是否存在,使用ajax校验用户名是否存在的注意事项有哪些,下面就是实战案例,一起来看一下。 新增一个用户的时候,需要判断这个手机号码是否存在,最开始的想法很简单在textbox上设置一个onmous…

    2025年3月8日
    200
  • Ajax获取数据后显示在前端页面

    这次给大家带来Ajax获取数据后显示在前端页面,Ajax获取数据后显示在前端页面的注意事项有哪些,下面就是实战案例,一起来看一下。 主要功能流程介绍 循环获取列表数据 点击列表数据进入详情页 点击报名参加弹出报名成功提示框 点击提示框中的确…

    2025年3月8日
    200
  • 使用ajax验证单号是否存在数据库

    这次给大家带来使用ajax验证单号是否存在数据库,使用ajax验证单号是否存在数据库的注意事项有哪些,下面就是实战案例,一起来看一下。 本文实例讲述了ajax同步验证单号是否存在的方法。分享给大家供大家参考,具体如下: //保存前执行的方法…

    编程技术 2025年3月8日
    200
  • Ajax异步加载的使用详解

    这次给大家带来Ajax 异步加载的使用详解,使用Ajax 异步加载的注意事项有哪些,下面就是实战案例,一起来看一下。 AJAX (Asynchronous JavaScript and XML,异步的 JavaScript 和 XML)。它…

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

    这次给大家带来新手必看的Ajax技术组成与核心原理分析,新手必看Ajax技术组成与核心原理分析的注意事项有哪些,下面就是实战案例,一起来看一下。 本文主要为大家分析了Ajax技术组成原理,供大家参考,具体内容如下 1、Ajax特点:局部刷新…

    编程技术 2025年3月8日
    200
  • Ajax技术的servlet输出怎么使用

    这次给大家带来Ajax技术的servlet输出怎么使用,使用Ajax技术servlet输出的注意事项有哪些,下面就是实战案例,一起来看一下。 Ajax的服务器端用PrintWriter out=resp.getWriter()来响应数据的时…

    编程技术 2025年3月8日
    200
  • 图文详解AJAX的底层原理介绍

    这次给大家带来图文详解AJAX的底层原理介绍,使用JAX底层原理的注意事项有哪些,下面就是实战案例,一起来看一下。 先上原理图:   背景:      1.传统的Web网站,提交表单,需要重新加载整个页面。      2.如果服务器长时间未…

    2025年3月8日 编程技术
    200
  • Ajax结合php怎么实现二级联动

    这次给大家带来Ajax结合php怎么实现二级联动,Ajax结合php实现二级联动的注意事项有哪些,下面就是实战案例,一起来看一下。 使用ajax,从php中获取数据 Ajax案例一 请选择 山东省 辽宁省 吉林省 请选择 // 1. 为元素…

    编程技术 2025年3月8日
    200
  • 怎么实现Ajax的三级联动商品分类

    这次给大家带来怎么实现Ajax的三级联动商品分类,实现Ajax的三级联动商品分类的注意事项有哪些,下面就是实战案例,一起来看一下。 思路分析: 效果:当页面加载时,利用ajax异步向后台请求数据,加载一级商品类别,当选择一级商品时加载二级商…

    2025年3月8日
    200

发表回复

登录后才能评论