Обработчик успеха не вызывается при загрузке файла с использованием extjs - PullRequest
4 голосов
/ 07 октября 2010

У меня есть веб-приложение J2EE с формой, куда я загружаю файл в папку на сервере.Во время загрузки пользователю показывается waitMsg, который должен исчезнуть после завершения загрузки с msgBox, указывающим то же самое.Код для успешного примера также приведен в файле js.Однако загрузка работает нормально, но waitMsg продолжается даже после завершения загрузки на сервер.
Код JS дан:

Ext.onReady(function(){

    Ext.QuickTips.init();

    var msg = function(title, msg){
        Ext.Msg.show({
            title: title,
            msg: msg,
            minWidth: 200,
            modal: true,
            icon: Ext.Msg.INFO,
            buttons: Ext.Msg.OK
        });
    };

    var fp = new Ext.FormPanel({
        renderTo: 'fi-form',
        fileUpload: true,
        width: 500,
        frame: true,
        title: 'Upload XML Config File ',
        autoHeight: true,
        bodyStyle: 'padding: 10px 10px 0 10px;',
        labelWidth: 50,
        defaults: {
            anchor: '95%',
            allowBlank: false,
            msgTarget: 'side'
        },
        items: [{
            xtype: 'fileuploadfield',
            id: 'form-file',
            emptyText: 'Select the xml File to upload',
            fieldLabel: 'File',
            name: 'file',
            buttonCfg: {
                text: '',
                iconCls: 'upload-icon'
            }
        }],
        buttons: [{
            text: 'Upload',
            handler: function(){
                if(fp.getForm().isValid()){
                    fp.getForm().submit({
                        url: 'uploadXML.htm',
                        waitMsg: 'Uploading your xml file...',
                        success: function(fp, o){
                        msg('Success', 'Processed file "'+o.result.file+'" on the server');
                        }
                    });
                }
                if (!validateFileExtension(Ext.getDom('form-file').value)) {
                    Ext.MessageBox.alert('Select another file',
                    'Only XML file, please.');
                    return;
                    }
            }
        },{
            text: 'Reset',
            handler: function(){
                fp.getForm().reset();
            }
        }]
    });

    function validateFileExtension(fileName) {
        var exp = /^.*\.(xml|XML)$/;
        return exp.test(fileName);
        }

});

Не уверен, что мне не хватает.
Заранее спасибо.

Ответы [ 2 ]

10 голосов
/ 03 июня 2011

Была похожая проблема. Выяснилось, что вам нужно установить тип контента "text / html" на странице, которая обрабатывает загрузку файла. :-(

Response.ContentType = "text/html";

Если вы прочитаете документацию для Ext.data.Connection, вы увидите, что

Ответ сервера анализируется браузером для создания документа для IFRAME. Если сервер использует JSON для отправки возвращаемого объекта, тогда заголовок Content-Type должен быть установлен на «text / html», чтобы указать браузеру вставлять текст без изменений в тело документа.

Мне потребовалось некоторое время, чтобы найти это, но когда я натолкнулся на ваш вопрос, кто-то другой мог бы сделать с такой же проблемой!

надеюсь, это поможет им!

3 голосов
/ 11 октября 2010

'uploadXML.htm' должен быть PHP или аналогичной процедурой на стороне сервера.этот PHP должен возвращать строку JSON, например: {'success': true} или {'success': false}.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...