这个问题与我之前的问题有关: 是否 READYSTATE_LOADED 跨浏览器?
所以我知道 readyState 跨浏览器不可靠。我目前只是在尝试在任何浏览器中进行概念验证。
我在我的插件中并且有这样的代码:
var xhr = new XMLHttpRequest();
xhr.onreadystatechange = function(){
if (xhr.readyState == 4){
self._onComplete(id, xhr);
}
else if (xhr.readyState == 2 ){
self._onSent( id, xhr );
}
};
如果我记录回调,则在“完成”之前立即触发“发送”,在我的服务器端脚本响应之后。我是否误解了 readyState 2 是什么?我尝试了 1 踢球,但在服务器响应之前也没有触发。
我查看了 xhr 对象的上传对象,它至少有一个“进度”事件,但我仍然没有看到任何关于进度的信息。事实上,如果最后一个进度是 97%,它不会在文件完成发送到服务器时以 100% 触发。因此,当服务器处理上传时,在 readyState 变为 4 之前,进度会挂在 97%。
这使用户认为上传停滞不前,甚至认为它实际上一直在上升。