1

ajaxを使用してアップロードのパーセンテージでラベルを実装しようとしています。問題は、xhr が 100% を返した後、readyState==4 および status==200 になるまでに約 17 秒かかることです。

FormData() オブジェクトを使用して画像 (png/jpg) と文字列を送信しています

<form onclick='send(this)'....

関数は次のとおりです。

function send(form){ var f = new FormData(form).......

アップロードに次のコードを使用しています

if(xhr.upload) {
    xhr.upload.onprogress = function(e) {
        if (e.lengthComputable) {
            var perc = Math.round((e.loaded/e.total) * 100);
            var state = {
                'done': e.loaded,
                'total': e.total,
                'percent': perc
            };
            progress(state);
        }
    };
}
4

1 に答える 1

2

これは、クライアント側のコードではなく、サーバーの問題である可能性が最も高いです。ハンドラーは、サーバーが基になるリクエストへの応答を返した後にのみonreadystatechange、値 4 で呼び出されます。readyStateハンドラーに渡されるロード/合計値はonprogress、サーバーに送信されたバイト数を示します。total === ロードされた場合、これは必ずしもサーバーが応答を返したことを示しているわけではありません。サーバーは、最後のバイトを受信した後に何らかの処理を実行し、応答を返します (onreadstatechangeハンドラーをトリガーします)。最後のバイトが送信されてからハンドラーが呼び出されるまでに長い時間がかかる場合onreadystatechangeは、何らかの理由でサーバーがリクエストへの応答に時間がかかっていることを示しています。

于 2013-04-04T01:08:02.633 に答える