ajax form表单提交 input file中的文件

article/2025/9/23 8:49:25

现今的主流浏览器由于ajax提交form表单无法把文件类型数据提交到后台,供后台处理,可是开发中由于某些原因又不得不用ajax提交文件,

为了解决这个问题我走了不少弯路:

1、用原生的 input file , 不支持ajax上传文件,你肯定会说可以用 ajax form表单上传了呀?不过我后面还要调用上传成功后用js处理一些对话框,所以这种方法排除

2、用了 uploadify 上传插件,弄出来能上传东西,结果不理想;因为不能判断上传的是哪一张图片,需求得判断每一张图片,排除

3、最后选择了jquery.form.min.js  这个上传插件,至于怎么用网上有不少的教程了,我这里就列出我遇到的一些问题吧,供日后再次遇到能快速使用(忘记了可以快速找到)

     下面说说 jquery.form.min.js 插件 它是一个优秀的Ajax表单插件,我们可以非常容易的使用它处理表单控件的值,清空和复位表单控件,附件上传,以及完成Ajax表单提交。jquery.form.min.js 有两个核心方法ajaxForm()和ajaxSubmit(),由于我只用到了ajaxSubmit(),所以我只介绍下ajaxSubmit()的应用。

     利用ajaxSubmit()使得整个表单的ajax提交过程变得非常的简单,所以我就说说我遇到的问题:

 

我用 jquery.form.min.js 遇到的几个问题:

3.1 、 单击提交按钮是,对话框自动关闭问题(用jquery.form.min.js中的方法实现)

3.2 、 判断input文件上传类型问题(用input标签的 onchange事件判断)

3.3 、 在IE 浏览器下 input file 清空问题(用js清空)

结合下面这些链接了解 jquery.form.min.js 的常用属性

http://www.helloweba.com/view-blog-236.html

http://www.jb51.net/article/42271.htm

 

下面贴出上面三个问题的前端代码:

问题3.1的答案

复制代码
复制代码
 function showRequest(formData, jqForm, options) {//提交前完成,验证input file 中的文件if(!true){ alert("密码不能为空!")return false;//无法通过验证}else{return true;//这样就通过验证}
复制代码
复制代码

 

问题3.3的答案

html

复制代码
复制代码
<form id="index_form" name="index_form" role="form" method="post" class="form-horizontal" enctype="multipart/form-data"><table><tr>  <td> 图片一 : <input id="pic1" name="pic1" type="file" οnchange="pic1()"/> </td>  </tr><tr> <td>  图片二 : <input id="pic2" name="pic2" οnchange="pic2()" type="file" /> </td>   </tr><tr> <td>  图片三: <input id="pic3" name="pic3" οnchange="pic3()" type="file" /></td>  </tr>                      </table> 
<input class="btn btn-primary" value="提交" type="submit" /> 
</form>
复制代码
复制代码

问题3.2答案  js  这里只给出一个input file 验证方法

复制代码
复制代码
  //校验上传文件是否为图片格式function pic1() {var strs = new Array(); //定义一数组var pic1= $("#pic1").val();strs = pic1.split('.');var suffix = strs [strs .length - 1];if (suffix != 'jpg' && suffix != 'gif' && suffix != 'jpeg' && suffix != 'png') {alert("你选择的不是图片,请选择图片!");var obj = document.getElementById('pic1');obj.outerHTML = obj.outerHTML; //这样清空,在IE8下也能执行成功//obj.select(); document.selection.clear(); 好像这种方法也可以清空 input file 的value值,不过我没测试}} 
复制代码
复制代码

 

复制代码
复制代码
$(function(){ var options = {  url:' .. .. ,, ',beforeSubmit:  showRequest,  //提交前处理 success:       showResponse,  //处理完成 resetForm: true,  dataType:  'json'  };  $('#index_form').submit(function() { //注意这里的index_form$(this).ajaxSubmit(options); return false;//防止dialog 自动关闭
     });});
复制代码
复制代码

 MVC中的action 获取 文件的方法

复制代码
复制代码
            HttpFileCollection files = System.Web.HttpContext.Current.Request.Files;if (files.Count<3)//这里是为了出现未知的错误,所以只有上传了三张图片才执行后面的代码{gm.id = 1;gm.message = "图片没上传成功!";return Json(gm);}
复制代码
复制代码

执行action方法成功后返回前端再次执行的js方法

复制代码
复制代码
function showResponse(responseText, statusText) {if (responseText.id == 3) {alert("上传成功");          $("#My_Dialog").modal('show');//走这么多弯路,为的就是这里,再次打开一个Dialog,所以没选择用form 的 action 上传文件}else {alert(responseText.message); } 
复制代码
复制代码

 

 

下面给出 ajaxSubmit() 提供丰富的选项设置,我们根据使用的可能性大小进行列表,以供参考。

属性描述
urlAjax请求将要提交到该url,默认是表单的action属性值
type指定提交表单数据的方法(method):“GET”或“POST”。默认值:表单的method属性值(如果没有找到默认为“GET”)。
dataType期望返回的数据类型。null、“xml”、“script”或者“json”其中之一。dataType提供一种方法,它规定了怎样处理服务器的响应。这个被直接地反映到jQuery.httpData方法中去。下面的值被支持:'xml':如果dataType == 'xml',将把服务器响应作为XML来对待。同时,如果“success”回调方法被指定, 将传回responseXML值。'json':如果dataType == 'json', 服务器响应将被求值,并传递到“success”回调方法,如果它被指定的话。。'script':如果dataType == 'script', 服务器响应将求值成纯文本。。默认值:null(服务器返回responseText值)
target指明页面中由服务器响应进行更新的元素。元素的值可能被指定为一个jQuery选择器字符串,一个jQuery对象,或者一个DOM元素。默认值:null。
beforeSubmit表单提交前被调用的回调函数。“beforeSubmit”回调函数作为一个钩子(hook),被提供来运行预提交逻辑或者校验表单数据。如果“beforeSubmit”回调函数返回false,那么表单将不被提交。“beforeSubmit”回调函数带三个调用参数:数组形式的表单数据,jQuery表单对象,以及传入ajaxForm/ajaxSubmit中的Options对象。默认值:null
success表单成功提交后调用的回调函数。如果提供“success”回调函数,当从服务器返回响应后它被调用。然后由dataType选项值决定传回responseText还是responseXML的值。默认值:null
clearForm表示如果表单提交成功是否清除表单数据。默认值:null
resetForm表示如果表单提交成功是否进行重置。默认值: null

jquery.form插件还提供了formToArray()、formSerialize()、fieldSerialize()、fieldValue()、clearForm()、clearFields() 和 resetForm()等方法。通常我们可以使用表单验证插件和jquery.form插件一起使用,效果更好。

 

 

 

 

下面给出一个 uploadify 示例代码,供日后参考:

复制代码
复制代码
<div id="index_Dialog" class="modal hide fade" tabindex="-1" role="dialog"aria-labelledby="myCaseLableJH" aria-hidden="true"><form id="index_form" name="indexUploadJH_form" role="form" method="post" class="form-horizontal" enctype="multipart/form-data"><b>请上传</b> <br />图片上传:<input id="uploadifyID" name="uploadifyID" type="file" multiple="multiple"/></form><input class="btn btn-primary" value="提交" type="button" οnclick="javascript:indexFunction();"/>               
</div>
<script type="text/javascript">//  认证必填框验证function indexFunction() {if ($("#Pass").val() == "") {//密码不能为空$("Pass").siblings('.CasevalidText').text('密码不能为空').show();return;}var Count = $("#uploadifyID").data('uploadify').queueData.queueLength;if (lawyerCertificateJHCount <= 0) {alert("请上传文件");return;}$('#uploadifyID').uploadify('upload', '*');}//清除并且关闭窗体function clearfromCasePassdata() {// $("#index_form :input").not(":button, :submit, :reset, :hidden").val("").removeAttr("checked").remove("selected"); //核心$("#index_Dialog").modal('hide');}$(function () {//上传文书附件管理loadFun();//初始化插件})//关闭上传图片窗体function ClosePDFsee() {$("#index_Dialog").modal('hide');}function loadFun(){$('#uploadifyID').uploadify({'swf': '/Scripts/uploadify/uploadify.swf',  //FLash文件路径'buttonText': '浏  览','width': 40,                          // 按钮的宽度'height': 15,                                //按钮文本'uploader': '/Home/getCasePassInfo',        //处理文件上传Action'queueID': 'lawyerCasefileQueue',           //队列的ID'queueSizeLimit': 999,                          //队列最多可上传文件数量,默认为999'auto': false,                                 //选择文件后是否自动上传,默认为true'multi': false,                                 //是否为多选,默认为true'removeCompleted': true,                       //是否完成后移除序列,默认为true'fileSizeLimit': '0MB','fileTypeDesc': "Image Files",                 //Files 标识可以上传任意文件'fileTypeExts': '*.jpg;*.png;*.gif;*.jpeg;', //允许上传的文件类型,限制弹出文件选择框里能选择的文件'onQueueComplete': function (event, data) {                 //所有队列完成 后事件$('#uploadifyID').uploadify('cancel', '*');},'onUploadStart': function (file) {$('#uploadifyID').uploadify("settings", 'formData', { 'Pass': $("#Pass").val(), Phone: $("#Phone").val(), no: $("#no").val(), name: $("#name").val(), fileIndex: file.index, filelength: $("#uploadifyID").data('uploadify').queueData.queueLength, intCount: file.index });},'onUploadError': function (event, queueId, fileObj, errorObj) {},'onUploadSuccess': function (file, data, respone) {data = JSON.parse(data);if (data.id == 2) {$("#index_Dialog").modal('hide');$('#IndexmediaForm').media({width: 500, height: 600,src: url});$("#newDialog").modal('show');}else {alert("上传失败," + data.message);}}});}
 
原文地址:https://www.cnblogs.com/Leo_wl/p/4393190.html

http://chatgpt.dhexx.cn/article/FhBMU6Em.shtml

相关文章

Jquery 中 ajaxSubmit 、ajaxForm使用讲解

最近在使用ajaxForm&#xff0c;随便把使用方法记下下来&#xff0c;以便以后回顾。 1 &#xff0c;引入依赖脚本 <script type"text/JavaScript" src"/js/jQuery/jquery.form.js"></script> //ajaxForm 依赖脚本 <script type"…

ajaxForm 与ajaxSubmit

ajaxSubmit 和ajaxForm区别 ajaxForm ajaxForm()不能提交表单。在document的ready函数中&#xff0c;使用ajaxForm来为AJAX提交表单进行准备。提交动作必须由submit开始 ajaxForm()适用于以表单提交方式处理ajax技术&#xff08;需要提供表单的action、id、 method&#xff0…

前后端交互之使用ajax方法实现form表单的提交

转载于&#xff1a;使用ajax方法实现form表单的提交 - 程序员十三 - 博客园 (cnblogs.com) οnsubmit“reutrn false”&#xff1a;表示禁止表单提交。 data: $(#addTaskform).serialize(),序列化提交表单数据。 不要忘记引用js文件 <script type"text/javascript&…

一文必懂-Ajax与form

Restful与Ajax Ajax示例1:查询所有学生数据示例2&#xff1a;查找部分学生数据中文传参 表单标签抓包数据 Post与GetRestful示例Restful附带URL参数 Ajax与form标签 Ajax 一种在网页上调用后台接口的方式 jquery提供了相应的用法 即 $.ajax({内容});先添加jQuery包。 内容部分…

手把手教你开发一款属于自己的Arduino开发板

【前言】 相信很多小伙伴们手里都一块或者几块开发板吧&#xff0c;没有没想过自己也开发一款开发板呢&#xff1f;接下来就教你开发一款属于自己的开发板吧(●◡●)。 【软件版本】 AD17 【正文】 1. 硬件选型 1.1 主控芯片&#xff1a;用ATMEGA32P吧&#xff0c;用LQFP封…

Arduino IDE 离线添加开发板

目录 问题背景配置环境配置方法在线方法&#xff08;失败&#xff09;离线方法&#xff08;成功&#xff09; 其他开发板参考资料 问题背景 想要使用ESP32-S2开发板&#xff0c;搭建一个小项目&#xff0c;目前比较主流的编程方法有三种&#xff0c;一种是IDF&#xff08;应该…

Arduino nano开发板选购

介绍两块Arduino nano开发板&#xff0c;串口芯片都是ch340g&#xff0c;黑色的采用Atmega168p&#xff0c;粉色的采用Atmega328p。板子挺厚的而且都是type c接口&#xff0c;有黑色和粉色可选。 除了主控芯片不同&#xff0c;其他都一样&#xff0c;只需要在Arduino程序中将处…

配置esp8266开发板的Arduino开发环境

1.esp8266开发板硬件&#xff1a; 基于esp8266的nodemuc开发板&#xff08;pdd上有卖不超过15块&#xff09;&#xff1b;microUSB数据线&#xff08;这里一定要是数据线&#xff0c;具备数据传输和充电功能&#xff0c;不能仅充电&#xff09;。 esp8266开发环境有许多例如&a…

Arduino手动安装esp8266开发板

Arduino手动安装esp8266开发板可以用离线安装包&#xff0c;确定就是离线安装包网上不好找&#xff0c;版本也不齐全&#xff0c;无法找到某个特定版本的离线安装包&#xff0c;好处是直接双击运行&#xff0c;傻瓜式安装就好了&#xff0c;下载地址 https://cloud.codess-nas…

几个常用的arduino附加开发板管理网址

摘要&#xff1a;本文介绍arduino变成环境下几个常用的开发板的网址&#xff0c;设置方法是“首选项”--”附加开发板管理器网址“填入对应的字符串即可&#xff0c;本文介绍的有mtstack开发板。 m5stack开发板 例如下图这种 还有下图这种&#xff0c;它们都是基于esp32核心的。…

如何用Arduino IDE开发9.9元的合宙LuatOS ESP32C3开发板?

如何用Arduino IDE开发9.9元的合宙LuatOS ESP32C3开发板&#xff1f; 合宙LuatOS ESP32C3-CORE开发板 简介硬件准备软件准备1、安装串口驱动&#xff08;CH343&#xff09;2、安装Arduino IDE3、添加ESP32C3开发板 烧录测试程序1、编译程序2、连接 & 上传 合宙LuatOS ESP32…

认识 Arduino 开发板

Arduino 是源自意大利的一个开放源代码的硬件项目平台&#xff0c;该平台包括一块具备简单 I/O 功能的电路板以及一套程序开发环境软件。 Arduino 真正腾飞的原因是其能够实现将模拟输入转换为数字输入&#xff0c;换言之&#xff0c;您可以将光线&#xff0c;温度&#xf…

彻底分析Arduino库安装和开发板库安装路径和方式

参考&#xff1a;https://blog.csdn.net/weixin_43794311/article/details/128631564&#xff0c;https://blog.csdn.net/t01051/article/details/103766886 一个最简单的安装esp8266和esp32的方法 在网址&#xff1a;https://arduino.me/download&#xff0c;下载对应的开发…

Arduino开发教程

Arduino开发教程 1 前言1.1 大道之悟1.2 Arduino 硬件1.3 Arduino 软件 2.基础篇2.1 点灯操作2.2 电机驱动2.3 机器通讯 3. 提高篇3.1 联合实验3.2 物联开发 4. 进阶篇4.1 实物开发4.2 友人优作 5. 优质工具5.1 串口工具5.2 开发工具5.3 3D打印机 6. 小结 &#x1f38f;&#x…

自制Arduino 风格开发板 - HK32F030MF4P6 紧凑开发板

模仿Arduino Nano 做一个HK32F030M 的紧凑开发板&#xff0c;排针间距和Arduino Nano 相同&#xff0c;整体尺寸略小&#xff0c;适合插在面包板上。兼容HK32F030MF4P6 和0301M&#xff0c;板载CH340N 串口和DS1307 时钟模块。开源工程地址&#xff1a;HK32F030MF4P6 紧凑开发板…

Arduino添加ESP32开发板

【2023年3月4日】 最近要在新电脑上安装Arduino&#xff0c;需要进行一些配置&#xff0c;正好记录一下&#xff01; Arduino2.0.1 下的开发板添加操作。 ESP32开发板GitHub链接&#xff1a; GitHub - espressif/arduino-esp32: Arduino core for the ESP32Arduino core for…

Arduino上手动添加开发板

最近一个在一个项目上想在树莓派3B上使用9dof-razor-imu传感器&#xff0c;&#xff0c;搭建开发环境的时候根据其官网说明选了Arduino。然而在添加他的第三方SparkFun开发板时出了问题&#xff0c;因为他的开发板环境包在GitHub上&#xff0c;所以Arduino的开发板管理器在下载…

Arduino安装与配置ESP8266开发板(超简单,亲测有效)

文章目录 前言一、下载Arduino二、 ESP8266环境配置(超简单&#xff0c;亲测有效)三、下载验证总结 前言 由于要上数字信号处理课程&#xff0c;需要安装Arduino&#xff0c;并在Arduino中配置ESP8266环境&#xff0c;然而发现在首选项中附加开发板管理器网址这种方法&#xf…

基于Arduino Uno开发板制作音乐播放器

基于Arduino Uno开发板制作音乐播放器 本文将基于Arduino开发板实现一个音乐播放器。 利用Arduino Uno读取sd卡模块中内存卡的音乐&#xff0c;传输信号到扬声器进行播放。一、项目软硬件简介&准备 1.Arduino开发板 Arduino Uno 是一款基于 Microchip ATmega328P 微控制…

二、初识arduino uno开发板

开发板参数表 什么是arduino? Arduino是一款便捷灵活、方便上手的开源电子原型平台。包含硬件&#xff08;各种型号的Arduino板&#xff09;和软件&#xff08;ArduinoIDE&#xff09;。构建于开放原始码simple I/O介面版&#xff0c;并且具有使用类似Java、C语言的Process…