atty24 2015-06-09 08:30 采纳率: 100%
浏览 3880
已采纳

用Extjs提交表单后,请求有返回数据,但success函数的action里取不到返回结果

 /**
 * 打开数据项导入窗口
 */
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();
}
  • 写回答

7条回答 默认 最新

  • atty24 2015-06-10 09:38
    关注

    谢谢大家,让我排除了很多走弯路的可能。

    认真看了下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返回结果是不是页面上就不用自己麻烦去写取结果的代码了。这一个待验证。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(6条)

报告相同问题?

悬赏问题

  • ¥88 实在没有想法,需要个思路
  • ¥15 MATLAB报错输入参数太多
  • ¥15 python中合并修改日期相同的CSV文件并按照修改日期的名字命名文件
  • ¥15 有赏,i卡绘世画不出
  • ¥15 如何用stata画出文献中常见的安慰剂检验图
  • ¥15 c语言链表结构体数据插入
  • ¥40 使用MATLAB解答线性代数问题
  • ¥15 COCOS的问题COCOS的问题
  • ¥15 FPGA-SRIO初始化失败
  • ¥15 MapReduce实现倒排索引失败