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指示已发送到服务器的字节数。如果总 === 已加载,这并不一定表明服务器已返回响应。服务器可能会在收到最后一个字节后执行一些处理,然后返回响应(触发您的onreadstatechange处理程序)。如果您注意到在发送最后一个字节和调用您的处理程序之间有很长的时间onreadystatechange,这表明您的服务器无论出于何种原因都在花时间响应请求。

于 2013-04-04T01:08:02.633 回答