У вас функция получает второй аргумент 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 в документации