ajaxForm的應用
背景:javascript
在From中須要上傳文件,而且可以在From提交成功後處理返回的值。就須要使用ajaxForm的方式來提交。html
使用html中form的提交方式,不管是使用頁面的submit按鈕仍是使用jquery的$('#myform').submit()方式,來提交form,都無法處理提交後返回來的數據。前端
要使用回調函數處理返回來的數據,就要使用ajax來提交form。java
可是ajax提交from的時候無法傳送文件。node
因此使用ajaxForm就能夠完美解決這個問題:既能夠上傳文件到後臺,也能夠寫回調函數來處理返回來的數據。jquery
使用ajaxForm須要引入文件:jquery.form.jsajax
官網 http://jquery.malsup.com/form/ ,實際上是個基於jquery的From plugin,須要jquery1.5 or later。chrome
詳細的用法能夠參見官網上的說明。json
下面講一個我使用的方式,看成例子:瀏覽器
1.前端代碼:
[html] view plain copy print?
<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組件。
[javascript] view plain copy print?
<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)寫表單提交三個階段的函數:
[javascript] view plain copy print?
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 : '錯誤提示',
msg : result.msg,
show : 'show', // 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');
}