0

私はpluploadのカスタマイズされた例を使用しています。

  • 1 つ以上のファイルが最初に Amazon S3 バケットにアップロードされ、
  • 次に、ファイル情報 + ユーザーが入力したデータ (説明など) が ajax を介してループ内のコントローラー アクションに POST されます。

次に、このコントローラー アクションは、ファイルが S3 バケットにアップロードされたことを確認し、情報をデータベースに保存して、ajax 呼び出しに成功または失敗を返します。

「UploadComplete」イベントを使用してアップロード エラーをチェックし、何もない場合は、実際の POST をループで実行します。

私がやりたいことは、ループ全体の処理が完了するまで待ってから、それに応じて確認メッセージ (すべて成功、すべて失敗、両方の組み合わせ) を表示することです。

現在のコード:

uploader.bind('UploadComplete', function (up, files) {

        var errorsPresent = false;
        var errors = '';
        // re-enable buttons
        $('div.plupload_buttons a').removeClass('disabled');
        $.each(uploader.files, function (i, file) {
            if (errorDescArray.hasOwnProperty(file.id)) {
                errorsPresent = true;
                errors += errorDescArray[file.id] + '<br />';
            }
            else if (file.status = plupload.DONE) {
                var jqXhr = $.post('/documents/add', {
                    '__RequestVerificationToken': $('#__AjaxAntiForgeryForm input[name=__RequestVerificationToken]').val(),
                    'filename': file.name,
                    'size': file.size,
                    'location': $('#' + file.id + '_location').val(),
                    'description': $('#filedesc_text_' + file.id).text()
                }).error(function (response) {
                    errorsPresent = true;
                    errors += response.responseText + '<br />';
                });
            }
        });
        //
        if (errorsPresent) {
            $('#uploadErrors').html('<div data-alert="alert" class="alert-message block-message fade in error"><a href="javascript:void(0)" class=\"close\">×</a><p>' + errors + '</p></div>');
        }
        else {
            // set confirmation message
            var message = files.length + ' file(s) were successfully uploaded.';
            // clear file list
            $('ul.plupload_filelist').html('');
            // remove files from list
            uploader.splice();
            // hide modal
            $('#upload-modal').modal('hide');
            // show confirmation
            $('#flashMessage').html('<div data-alert="alert" class="alert-message block-message fade in success"><a href="javascript:void(0)" class=\"close\">×</a><p>' + message + '</p></div>');
        }
    });

上記は、スニペットの後半が POST の完了を実際には待機しないという点で明らかに欠陥があり、その結果、POST にエラー応答があった場合でも成功の確認が表示されます。

私の質問は次のとおりです: ループ内で ajax 投稿を実行し (より良い方法がない限り)、ループの処理が終了した後に確認メッセージを処理するにはどうすればよいですか?

4

0 に答える 0