ajaxForm的应用

前端之家收集整理的这篇文章主要介绍了ajaxForm的应用前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

背景:

在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

原文链接:https://www.f2er.com/ajax/163240.html

猜你在找的Ajax相关文章