Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/extjs/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript ExtJS文件上传问题_Javascript_Extjs_File Upload_Extjs4 - Fatal编程技术网

Javascript ExtJS文件上传问题

Javascript 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

ExtJS版本:4.1.0

已回答-请参阅下面我的回答。。。真的很傻

我有一个带有几个字段的简单表单,其中一个是xtype
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
。进行此更改后,我的服务器会完美地接收上载,从而允许我在控制器中保持事件处理,并在视图中查看逻辑!