Javascript ExtJS文件上传问题
ExtJS版本:4.1.0 已回答-请参阅下面我的回答。。。真的很傻 我有一个带有几个字段的简单表单,其中一个是xtypeJavascript ExtJS文件上传问题,javascript,extjs,file-upload,extjs4,Javascript,Extjs,File Upload,Extjs4,ExtJS版本:4.1.0 已回答-请参阅下面我的回答。。。真的很傻 我有一个带有几个字段的简单表单,其中一个是xtypefileuploadfield。我在控制器的this.control方法中的表单保存按钮上侦听click事件。当click事件发生时,我运行一个方法saveForm,如下所示: saveForm: function(button) { /** Get the Window Object and retrieve the Form*/ var currentWi
fileuploadfield
。我在控制器的this.control
方法中的表单保存按钮上侦听click
事件。当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
表单对象,检查对象的\u字段
,查看我的fileuploadfield
和我在字段中输入的文件路径(即C:\fakepath\somefile.png)。我还可以执行form.getField('upload-field-id')
以获取上载字段元素。方法form.hasUpload()
返回TRUE
更重要的是,当我调用服务器上的$\u文件数组时,它是空的
在我在ExtJS中看到的文件上传示例中,表单提交是通过视图中Save按钮上的处理程序函数进行的。由于我喜欢在控制器中保留处理按钮按下的逻辑,我希望这不是我唯一的选择
如果您有任何意见,我们将不胜感激,谢谢您的时间。这肯定是服务器端的问题。ExtJS利用隐藏组件向服务器提交多部分表单。这确实如指南、示例和文档中所述
我不熟悉上面提到的var dump函数,但需要确保服务器端组件正确处理多部分表单提交 我觉得有点傻,但问题是从传递给我的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)
}
}
服务器已成功接收文件上载 看。我发现问题在于我如何从控制器的操作中获取表单。.down
应替换为.up
。进行此更改后,我的服务器会完美地接收上载,从而允许我在控制器中保持事件处理,并在视图中查看逻辑!