3

blueimp ファイル アップロード プラグインを使用していくつかのファイル アップロード機能を実装していますが、最後のファイル プログレス バーが 100% に達してから、停止イベントと完了イベントが発生するまでの間に大きな時間差があることに気付きました。コード:

        $('#fileupload').fileupload({
            dataType: 'json',
            progress: function (e, data) {
                var progress = parseInt(data.loaded / data.total * 100, 10);
                var bar = data.context.children().children(".progress");
                $(bar).css("width", progress + "%");
            },
            add: function (e, data) {
                data.context = $("<div></div>").html("Uploading...<div class='progressHolder'><div class='progress'>&nbsp;</div></div>").appendTo($("#files"));
                data.submit();
                $("#processing").fadeIn();
            },
            stop: function (e, data) {
                $("#uploadFiles").fadeIn();
                $("#processing").fadeOut();
            },
            done: function (e, data) {
                $.each(data.result.files, function (index, file) {
                    idArray.push(file.Id);
                });
            }
        });

なぜこれが起こるのか誰にも分かりますか?プログレスバーがいつ完了/停止が呼び出されるかを考慮するようにするにはどうすればよいですか?

4

1 に答える 1

7

ファイルをアップロードすると、ファイルは最初に(明らかに)サーバーにアップロードされ、サーバーは要求されたサーバー側スクリプトを実行し、そこでファイルを処理します。リクエストの「ファイルの処理」部分が即時でない場合、進行状況が 100% に達してから完了コールバックがトリガーされるまでに遅延が発生します。ネットワークラグがある場合、遅延が発生することもあります。

progress イベントは、リクエストの進行状況ではなく、アップロードの進行状況のみを追跡します。

1 つの解決策は、プログレス バーを停止させてから、done コールバックで90%バンプすることです。単純に100%掛けるdata.total1.1

        progress: function (e, data) {
            var progress = parseInt(data.loaded / (data.total*1.1) * 100, 10);
            var bar = data.context.children().children(".progress");
            $(bar).css("width", progress + "%");
        },
于 2013-02-04T16:52:57.280 に答える