Javascript-форум (https://javascript.ru/forum/)
-   ExtJS (https://javascript.ru/forum/extjs/)
-   -   file upload - json response (https://javascript.ru/forum/extjs/57826-file-upload-json-response.html)

bastrakov 21.08.2015 15:28

file upload - json response
 
привет всем.

пол-пятницы искал, и так и не нашел, как взять ответ сервера при file upload?
вот пример из доки
http://dev.sencha.com/deploy/ext-4.0...file-upload.js
конкретно файл грузит вот эта шняга

form.submit({
	url: 'file-upload.php',
	waitMsg: 'Uploading your photo...',
	success: function(form, action) {
	    msg('Success', 'Processed file "' + o.result.file + '" on the server');
	}
    });


но ни в form, ни в action нет никаких упоминаний о серверном response, хотя все гугл-советы на эту тему упорно твердят, что action должен иметь action.response

если кто сталкивался, подскажите, плиз, как при сабмите формы, поймать ответ сервера (json, если это важно).

заранее спасибо

novikov 22.08.2015 16:22

У вас функция получает второй аргумент action, а выводит на экран o.

Код там на самом деле такой:

buttons: [{
            text: 'Save',
            handler: function(){
                var form = this.up('form').getForm();
                if(form.isValid()){
                    form.submit({
                        url: 'file-upload.php',
                        waitMsg: 'Uploading your photo...',
                        success: function(fp, o) {
                            msg('Success', 'Processed file "' + o.result.file + '" on the server');
                        }
                    });
                }
            }
        }


JSON с сервера приходит. Добыть его можно через action.result, как видно из примера, а не через action.response.


Подробнее об опциях submit в документации

bastrakov 24.08.2015 07:34

спасибо за ответ.
забыл написать в старте. версия 5.1.1.451.
нет result во втором параметре success: function(...
прямо сейчас продолжаю рыть это дело, и все больше склоняюсь к мысли переписать серверную часть этого дела, потому что не понимаю, как ответ сервера обработать.

bastrakov 24.08.2015 08:51

разобрался.
некоторое время назад была бага, с загрузкой файлов в FF. остался код фикса в корне проекта. вот такой:

//заплатка загрузки файла для фф.
Ext.override(Ext.form.action.Submit,{
    onSuccess: function(response) {
        var form = this.form,
            success = true,
            result = response;
        response.responseText = '{"success": true}';
        form.afterAction(this, success);
    }
});


с сервера идет код ошибки, но фикс перенаправлял все на success, а в success (настаиваю) нет action.response (Ext.versions.core 5.1.1.451).

убрал фикс, как отразиться пока не знаю - тестировщики расскажут. :-) но вроде работает. в результате пошло правильно на failure, а в нем можно брать Ext.decode(action.response.responseText).

вопрос остался. при upload file, как обработать ответ сервера, если ответ "200 ОК", но еще возвращается некий json?

...ничего нового не узнал, но голову поломал изрядно. :-(

спасибо за ответы.


Часовой пояс GMT +3, время: 05:12.