0

ここ数日間、私が頭を悩ませていた難問があります。Drupal 7 でモーダル フォームを使用しているため、hook_form システムの外で作業して、画像をアップロードしようとしています。フォームは ajax 投稿を介して送信されるため、投稿と共にファイルを送信できません。私がやったことは、ajaxコールバックで、ファイル入力で新しいフォーム要素を作成し、送信をトリガーして、モジュール定義のページに投稿することです。

元の入力要素:

<input type="file" id="chooseImage" name"someImage" class="form-file">

jsトリガー送信:

$.ajax({
type:'POST',
url:$('#originalForm').attr('action'),
data: data,
success: function(response) {
    if (response.success) {
        $('<form id="imageForm" method="POST" action="upload/image/'+response.data.nid+'"></form>').appendTo($('#imageSubmit'));
        $('#chooseImage').appendTo($('#imageForm')); 
        console.log($('#imageForm'));
        $('#imageForm').submit(function(e){
            console.log(e);
            alert('freeze! hammertime...');
        });
        //This should post the file but it isn't...
        $('#imageForm').trigger('submit');
    }
},
dataType:'json'
});

submit イベントは、ファイルのプロパティを問題なく表示します。ただし、ページのコールバックが終了するバックエンドでは...

    function myModule_image_upload($param){
        error_log('number of files = '.sizeof($_FILES));
    }

投稿されたファイルが表示されていません。.submit() の実行後にブラウザーが投稿のファイル データを削除していると推測しています。その場合、私はおそらくそれについて何もできないので、.submit() 内に別のメニューを実装する必要があります画像アップロード用フックシステム。

また、これが実際に行っていることが何であれ、ウォッチドッグが永久に壊れているようで、新しいダンプを再インポートする必要があります。

4

1 に答える 1

0

これを試して:

$('<form id="imageForm" enctype="multipart/form-data" method="POST" action="upload/image/'+response.data.nid+'"></form>').appendTo($('#imageSubmit'));

enctype を設定するのを忘れていました。

別のエラー:

<input type="file" id="chooseImage" name"someImage" class="form-file">

する必要があります

<input type="file" id="chooseImage" name="someImage" class="form-file"/>
于 2012-08-15T23:50:52.127 に答える