5

アップロード進行状況バーが正常に機能しないという問題が発生しています。

XMLHttpRequest レベル 2 仕様に従って、次のように loadstart と progress のイベント リスナーをアタッチしました。

var xhr = $.ajaxSettings.xhr();
xhr.upload.addEventListener('loadstart', function(e) {progressCallback(0);});
xhr.upload.addEventListener('progress', function (e) {
    progressCallback(e.loaded / e.total);
});    

$.ajax({
    url: url,
    type: 'POST',
    processData: false,
    contentType: false,
    data: formData,
    xhr: function () {
        return xhr;
    }
}).done(function (data) {
    // Finish stuff
})

ファイルは正しくアップロードされますが、進行状況リスナーは、リクエストが 100% (e.total == e.loaded) で終了した場合にのみ呼び出されます。

上記のコードに何か問題がありますか、それとも特別な方法でサーバーを構成する必要がありますか?

4

2 に答える 2

2

ファイルの合計サイズを判別できず、e.loadedゼロe.totalの場合。progressこれは関数内で確認できます。

if (evt.lengthComputable) {
    progressCallback(e.loaded / e.total);
}

サーバーは、仕様Content-Lengthで定義されているものも送信する必要があります。

HTTPエンティティ本体の長さがContent-Lengthヘッダーでわかっている場合は、lengthComputable属性をtrueに初期化し、total属性を長さに初期化します。

file:プログレスバーがプロトコルで機能しないことにも注意してください。

非常に広範囲にわたるMozillaドキュメントを本当にお勧めできます-XMLHTTPRequestを使用するMozillaDocs

于 2013-03-19T08:54:05.963 に答える