背景:

在From中需要上传文件,并且能够在From提交成功后处理返回的值。就需要使用ajaxForm的方式来提交。

使用html中form的提交方式,无论是使用页面的submit按钮还是使用jquery的$('#myform').submit()方式,来提交form,都没法处理提交后返回来的数据。

要使用回调函数处理返回来的数据,就要使用ajax来提交form。

但是ajax提交from的时候没法传送文件。

所以使用ajaxForm就可以完美解决这个问题:既可以上传文件到后台,也可以写回调函数来处理返回来的数据。


使用ajaxForm需要引入文件:jquery.form.js

官网http://jquery.malsup.com/form/,其实是个基于jquery的From plugin,需要jquery1.5 or later。


详细的用法可以参见官网上的说明。

下面讲一个我使用的方式,当作例子:

1.前端代码:

<span style="font-size:14px;"><form id="fm_importSales" method="post" enctype="multipart/form-data">
                <table  class="fm-table fm-table-td">
                    <tr>
                        <th>选择文件:</th>
                        <td>
                            <!-- accept属性限定xlsx格式文件,但是该属性只在FF和chrome生效,IE10以下不生效 -->
                            <input id="excelfile" name="filename" type="file" accept="application/vnd.openxmlformats-officedocument.spreadsheetml.sheet" style="COLOR: RED;font-size: 15px;">
                        </td>
                    </tr>
                    <tr>
                        <td>
                        <input style="width: 100px;" value="导入Excel" type="submit"/>
                        <input style="width: 100px;" value="取消" type="button" onclick="javascript:$('#dlg_importSales').dialog('close')"/>
                        </td>
                    </tr>
                    <input type="hidden" id="importOrgId" name="orgId">
                    <input type="hidden" id="importChlInfoId" name="channelInfoId">
                </table>
            </form></span>

前端定义了一个form,form中包含一个table。form包含一个submit按钮。

2.js代码

(1)在document.ready()中注册form组件。

<span style="font-size:14px;">$(document).ready(function() {  
	// bind 'myForm' and provide a simple callback function   
	var options = {
			url: basecontextpath+'/channelOrganization/importSales',//定义返回JSON数据,还包括xml和script格式
		    dataType:'json',beforeSerialize: dobeforeSerialize,beforeSubmit: dobeforeSubmit,//beforeSend: handelImport,success: handelResonse
	}
	$('#fm_importSales').ajaxForm(options);
	
	$('#fm_importSales').submit(function() {
		// 提交表单
		$(this).ajaxSubmit();
		// return false to prevent normal browser submit and page navigation
		return false;
	});
});
</span>
(2)写表单提交三个阶段的函数:
function handelResonse(result){
	//提交成功后调用
   if (result.success){
	   $('#dlg_importSales').dialog('close');
	   $.messager.show({
			title : '提示',msg : result.msg,show : 'show',// fade是渐隐,另外两种是“show”和“slide”
			timeout : 3000 			// 持续时间
		});
   } else {
	   $.messager.show({
			title : '错误提示',// fade是渐隐,另外两种是“show”和“slide”
			timeout : 3000 			// 持续时间
		});
   }
   // 判断是否要导出txt
   if (result.exportTxt) {
	   getTxt();
   }
}

function getTxt(){
	var url_getTxt = basecontextpath+'/channelOrganization/importSales';
	//window.open(url_getTxt);   //会打开新选项卡,可能被浏览器拦截,弃用
	window.location.href = url_getTxt;
}
function dobeforeSerialize(){
	//alert('dobeforeSerialize');
	// return false to cancel submit
	
	var excelfile = $('#excelfile').val();
	if("" == excelfile || null == excelfile) {
		alert('请选择文件。');
		return false;
	}
	
	var p = excelfile.endWith(".xlsx");
	if (!excelfile.endWith(".xlsx")) {
		alert('文件格式不对!请选择.xlsx格式的文件。');
		return false;
	}
	
	var node = $('#channelOrganization').tree('getSelected');
	if (null == node) {
		alert('请先选中要添加销售点的组织结构。');
		return false;
	}
	var channelId = $("#channelList").comboBox('getValue');
	$('#importOrgId').val(node.id);
	$('#importChlInfoId').val(channelId);
	return true;
}
function dobeforeSubmit(){
	//alert("dobeforeSubmit");
}

function handelImport() {
	//alert('handelImport');
}


一下三个函数会按顺序执行:

beforeSerialize

beforeSubmit

beforeSend

ajaxForm的应用的更多相关文章

  1. HTML5新增form控件和表单属性实例代码详解

    这篇文章主要介绍了HTML5新增form控件和表单属性实例代码详解,需要的朋友可以参考下

  2. HTML5表单验证特性(知识点小结)

    这篇文章主要介绍了HTML5表单验证特性的一些知识点,本文通过实例代码截图的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

  3. amazeui页面分析之登录页面的示例代码

    这篇文章主要介绍了amazeui页面分析之登录页面的示例代码,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

  4. ios – Swift Eureka Form中的循环

    我正在构建一个Eureka表单,并希望在表单中放置一个循环来构建基于数组的步进器列表.我试图使用的代码是:但是,当我这样做时,我在StepperRow行上出现了一个错误:所以看起来Swift不再认为它在形式之内并且正在关注

  5. swift 上传图片和参数 upload image with params

    Alamofire.upload(urlRequest.0,urlRequest.1).progress{(bytesWritten,totalBytesWritten,totalBytesExpectedToWrite)inprintln("\(totalBytesWritten)/\(totalBytesExpectedToWrite)")}}

  6. swift – 使用PostgreSQL在Vapor 3中上传图片

    我正在关注这些家伙MartinLasek教程,现在我正在“图片上传”.似乎没有人能回答“如何上传iVapor3图像”的问题Db连接正常,所有其他值都保存.这是我的创建方法:和型号:}和叶子模板:我知道需要一种管理文件的方法和原始图像字节,但我怎么去那里?这使用多部分表单的自动解码:upload.leaf文件是:使用File类型可以访问上载文件的本地文件名以及文件数据.如果将其余的Question字段添加到ExampleUpload结构中,则可以使用该路径捕获整个表单的字段.

  7. android – 按钮不在LinearLayout中显示

    我试图在TextView之后在LinearLayout中添加一个Button,但它没有显示出来.这是我的布局代码TextView正确显示正确的文本但不是按钮我得到一个三到四行长的大空格.我错过了什么?解决方法试试这个.使用android:layout_width=“wrap_content”代替android:layout_width=“fill_parent”用于TextView和Button

  8. HTML form表单提交方法案例详解

    这篇文章主要介绍了HTML form表单提交方法案例详解,本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下

  9. 表单项的name命名为submit、reset引起的问题

    最近朋友使用了form的一个表单命名为关键词引起了无法reset和提交.原来是这个问题

  10. React Form组件的实现封装杂谈

    这篇文章主要介绍了React Form组件的实现封装杂谈,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

随机推荐

  1. xe-ajax-mock 前端虚拟服务

    最新版本见Github,点击查看历史版本基于XEAjax扩展的Mock虚拟服务插件;对于前后端分离的开发模式,ajax+mock使前端不再依赖后端接口开发效率更高。CDN使用script方式安装,XEAjaxMock会定义为全局变量生产环境请使用xe-ajax-mock.min.js,更小的压缩版本,可以带来更快的速度体验。

  2. vue 使用 xe-ajax

    安装完成后自动挂载在vue实例this.$ajaxCDN安装使用script方式安装,VXEAjax会定义为全局变量生产环境请使用vxe-ajax.min.js,更小的压缩版本,可以带来更快的速度体验。cdnjs获取最新版本点击浏览已发布的所有npm包源码unpkg获取最新版本点击浏览已发布的所有npm包源码AMD安装require.js安装示例ES6Module安装通过Vue.use()来全局安装示例./Home.vue

  3. AJAX POST数据中文乱码解决

    前端使用encodeURI进行编码后台java.net.URLDecoder进行解码编解码工具

  4. Koa2框架利用CORS完成跨域ajax请求

    实现跨域ajax请求的方式有很多,其中一个是利用CORS,而这个方法关键是在服务器端进行配置。本文仅对能够完成正常跨域ajax响应的,最基本的配置进行说明。这样OPTIONS请求就能够通过了。至此为止,相当于仅仅完成了预检,还没发送真正的请求呢。

  5. form提交时,ajax上传文件并更新到&lt;input&gt;中的value字段

  6. ajax的cache作用

    filePath="+escape;},error:{alert;}});解决方案:1.加cache:false2.url加随机数正常代码:网上高人解读:cache的作用就是第一次请求完毕之后,如果再次去请求,可以直接从缓存里面读取而不是再到服务器端读取。

  7. 浅谈ajax上传文件属性contentType = false

    默认值为contentType="application/x-www-form-urlencoded".在默认情况下,内容编码类型满足大多数情况。在这里,我们主要谈谈contentType=false.在使用ajax上传文件时:在其中先封装了一个formData对象,然后使用post方法将文件传给服务器。说到这,我们发现在JQueryajax()方法中我们使contentType=false,这不是冲突了吗?这就是因为当我们在form标签中设置了enctype=“multipart/form-data”,

  8. 909422229_ajaxFileUpload上传文件

    ajaxFileUpload.js很多同名的,因为做出来一个很容易。我上github搜AjaxFileUpload出来很多类似js。ajaxFileUpload是一个异步上传文件的jQuery插件传一个不知道什么版本的上来,以后不用到处找了。语法:$.ajaxFileUploadoptions参数说明:1、url上传处理程序地址。2,fileElementId需要上传的文件域的ID,即的ID。3,secureuri是否启用安全提交,默认为false。4,dataType服务器返回的数据类型。6,error

  9. AJAX-Cache:一款好用的Ajax缓存插件

    原文链接AJAX-Cache是什么Ajax是前端开发必不可少的数据获取手段,在频繁的异步请求业务中,我们往往需要利用“缓存”提升界面响应速度,减少网络资源占用。AJAX-Cache是一款jQuery缓存插件,可以为$.ajax()方法扩展缓存功能。

  10. jsf – Ajax update/render在已渲染属性的组件上不起作用

    我试图ajax更新一个有条件渲染的组件。我可以确保#{user}实际上是可用的。这是怎么引起的,我该如何解决呢?必须始终在ajax可以重新呈现之前呈现组件。Ajax正在使用JavaScriptdocument.getElementById()来查找需要更新的组件。但是如果JSF没有将组件放在第一位,那么JavaScript找不到要更新的内容。解决方案是简单地引用总是渲染的父组件。

返回
顶部