0

ExtJSバージョン:4.1.0

回答済み-以下の私の回答を参照してください...本当にばかげています

いくつかのフィールドを持つ単純なフォームがあり、そのうちの1つはxtypefileuploadfieldです。Controllerのメソッドclickのフォームの保存ボタンでイベントをリッスンします。イベントが発生すると、次のようなメソッドを実行しthis.controlます。clicksaveForm

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フォームオブジェクトを作成し、オブジェクトを調べて_fieldsfileuploadfieldフィールドに入力したファイルのパス(C:\ fakepath \ somefile.pngなど)を確認できます。form.getField('upload-field-id');アップロードフィールド要素を取得するために実行することもできます。メソッドはをform.hasUpload()返しますTRUE

キッカーは、サーバー上のアレイを呼び出すform.submit()と、空になっていることです。var_dump()$_FILES

ExtJSでのファイルのアップロードについて見た例では、フォームの送信はhandler、ビューの[保存]ボタンの関数を介して行われます。コントローラーでボタンの押下を処理するためのロジックを保持するのが好きなので、これが私の唯一のオプションではないことを願っています!

ご意見をいただければ幸いです。お時間をいただきありがとうございます。

4

2 に答える 2

0

これは間違いなくサーバー側の問題です。ExtJSは、非表示のコンポーネントを利用して、マルチパートフォームをサーバーに送信します。これは、ガイド、例、およびドキュメントで説明されているように実際に機能します。

上記で参照したvardump関数に慣れていませんが、サーバー側のコンポーネントがマルチパートフォームの送信を正しく処理していることを確認する必要があります。

于 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;
}

予想どおり、保存ボタンをクリックすると、ChromeInspectorは次のように出力します。

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 に答える