Ajax XMLHttpRequest.addEventListener与XMLHttpRequest.upload.addEventListener

Ajax XMLHttpRequest.addEventListener与XMLHttpRequest.upload.addEventListener,ajax,html,xmlhttprequest-level2,Ajax,Html,Xmlhttprequest Level2,此代码块之间的差异是什么: var xhr = new XMLHttpRequest(); xhr.upload.addEventListener("progress", uploadProgress, false); xhr.addEventListener("load", uploadComplete, false); xhr.addEventListener("error", uploadFailed, false); xhr.addEventListener("abort", uploa

此代码块之间的差异是什么:

var xhr = new XMLHttpRequest();
xhr.upload.addEventListener("progress", uploadProgress, false);
xhr.addEventListener("load", uploadComplete, false);
xhr.addEventListener("error", uploadFailed, false);
xhr.addEventListener("abort", uploadCanceled, false);

xhr.open("POST", "upload_url");
xhr.send(some_form_data);
这是:

var xhr = new XMLHttpRequest();
xhr.upload.addEventListener("progress", uploadProgress, false);
xhr.upload.addEventListener("load", uploadComplete, false);
xhr.upload.addEventListener("error", uploadFailed, false);
xhr.upload.addEventListener("abort", uploadCanceled, false);

xhr.open("POST", "upload_url");
xhr.send(some_form_data);

我在博客和其他SO文章中看到了这两种实现,但没有人解释为什么它们使用一种而不是另一种。在这一点上,我能找到的唯一区别是后者不能在默认的Android浏览器上工作,而前者似乎可以在几乎所有方面工作。

根据w3c关于XMLHttpRequest的规范

如前所述,每个XMLHttpRequest对象都有一个关联的XMLHttpRequestUpload对象

下载和上载传输都存在进度事件。下载事件在XMLHttpRequest对象本身上触发,如上面的示例所示。上载事件在XMLHttpRequest.upload对象上激发


我认为
xhr.upload
基本上用于跟踪上传文件的上传状态,否则使用第一种方法总是更好。