0

ExtJS 版本:4.1.0

已回答 - 请参阅下面的回复......真的很愚蠢

我有一个包含几个字段的简单表单,其中一个是 xtype fileuploadfield。我在控制器方法click中的表单保存按钮上监听事件。this.controlclick事件发生时,我运行一个方法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视图中 Save 按钮上的函数发生的。由于我喜欢在控制器中保留处理按钮按下的逻辑,我希望这不是我唯一的选择!

任何输入将不胜感激,感谢您的宝贵时间。

4

2 回答 2

0

这肯定是服务器端问题。ExtJS 利用隐藏组件向服务器提交多部分表单。这确实如指南、示例和文档中描述的那样有效。

我不熟悉您上面提到的 var dump 功能,但是您需要确保您的服务器端组件正在正确处理多部分表单提交。

于 2012-10-18T16:50:23.967 回答
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)
  }
}

服务器已成功接收到文件上传!

于 2012-10-18T17:06:33.167 回答