/**
* 打開數據項導入窗口
*/
function openDataItemImportWnd() {
Ext.create('Ext.window.Window', {
title: '導入數據項',
autoHeight: true,
width: 400,
modal: true,
layout: 'fit',
items: {
xtype: 'form',
method : 'POST',
url: "importDataItemStructure.up",
standardSubmit: false,
items: [{
xtype: 'filefield',
emptyText: '請選擇要上傳的xls文件',
id: 'filefield_yY71MXsb',
name: 'fileName',
allowBlank: "false",
width: 300,
hideLabel: 'false',
labelAlign: 'right'
}],
buttons: [{
text: '導入',
formBind: true,
handler: function(button) {
Ext.getBody().mask('數據導入中...');
// 獲取表單的值
var form = button.up('form').getForm();
form.submit({
success: function(form, action) {
console.dir(action);
Ext.Msg.alert('Success', action.result.info.message);
},
failure: function(form, action) {
Ext.Msg.alert('Failed', action.result ? action.result.info.message : 'No response');
}
});
Ext.getBody().unmask();
}
}, {
text: '取消',
handler: function(button) {
button.up('window').destroy();
}
}]
}
}).show();
}
謝謝大家,讓我排除了很多走彎路的可能。
認真看了下Extjs的API,其中關於文件上傳表單提交的一段:
文件上傳不能用標准“Ajax”技術執行,也就是不能執行XMLHttpRequests。 作為替代,一個隱藏的包含全部域的
元素被暫時創建,並與其target提交設置為指向一個動態生成的, 隱藏的被插入到document,但是在返回數據已經收集後被移除。
請求的返回結果被返回給了那個隱藏的裡的document。
在主頁面中添加這個監聽函數,當上傳完成後,就去裡的document裡去取得返回結果。
Ext.data.Connection.prototype.onUploadComplete=function(frame, options) {
//到Iframe裡去取返回結果。
}
我後台是用的Spring框架,構造好ModelMap,直接由Spring自動返回給頁面的。
按以上思路取到了返回結果。
不過我想,Extjs應該把從iframe裡取結果的邏輯封裝好才是合理的呀。為什麼還要自己手動去寫?
以前沒用過Extjs框架,不知道如果後台不是Spring框架自動返回結果,而是自己直接用response返回結果是不是頁面上就不用自己麻煩去寫取結果的代碼了。這一個待驗證。