ExtJS版本:4.1.0
已回答 - 请参阅下面的回复......非常愚蠢
我有一个包含几个字段的简单表单,其中一个是xtype fileuploadfield
。我在Controller click
方法中的表单的保存按钮上监听this.control
事件。当click
事件发生时,我运行方法saveForm
,如下所示:
saveForm: function(button) {
/** Get the Window Object and retrieve the Form*/
var currentWin = button.up('window'),
form = currentWin.down('form');
/** Get the Form Object */
form = form.getForm();
/** ...continued... */
}
在我的方法中,我可以console.log
表单对象,检查对象的_fields
并查看我的fileuploadfield
以及我在字段中输入的文件的路径(即C:\ fakepath \ somefile.png)。我还可以执行form.getField('upload-field-id');
来获取上传字段元素。方法form.hasUpload()
返回TRUE
。
踢球者是当我在服务器上调用form.submit()
和var_dump()
$_FILES
数组时,它是空的!
在我在ExtJS中看到的文件上传示例中,表单提交通过视图中“保存”按钮上的handler
函数进行。由于我喜欢在控制器中保持处理按钮按下的逻辑,我希望这不是我唯一的选择!
非常感谢任何意见,谢谢您的时间。
答案 0 :(得分:0)
这肯定是服务器方面的问题。 ExtJS利用隐藏组件将多部分表单提交给服务器。这确实如指南,示例和文档中所述。
我不熟悉您在上面提到的var转储功能,但您需要确保您的服务器端组件正确处理多部分表单提交。
答案 1 :(得分:0)
我觉得有点傻,但问题与从传递给我的saveForm
方法的按钮检索表单对象有关。
修正:
在我的ExtJS控制器中......
saveForm: function(button)
{
var currentWindow = button.up('window');
/** var form = button.down('form').getForm(); **INCORRECT** */
var form = button.up('form').getForm(); /** this is correct */
form.submit({
url : '/service/form/upload/format/json',
waitMsg : 'Uploading....',
success : function(form,o) {
alert(o.response.responseText);
},
failure: function(form, action)
{
console.error('form, action', form,action);
alert('failure');
}
});
}
在我的后端(Zend),我的控制器操作很简单:
public function uploadAction()
{
var_dump($_FILES);
this->view->success = false;
}
正如预期的那样,点击保存按钮后,我的Chrome Inspector会输出以下内容:
Uncaught Ext.JSON.decode(): You're trying to decode an invalid JSON String:
{"success":false}array(1) {
["file-upload-field"]=>
array(5) {
["name"]=>
string(29) "TestImage.jpg"
["type"]=>
string(10) "image/jpeg"
["tmp_name"]=>
string(14) "/tmp/php7XfeLD"
["error"]=>
int(0)
["size"]=>
int(89799)
}
}
服务器已成功收到文件上传!