11

此代码块有什么区别:

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 浏览器,而前者似乎几乎适用于所有东西。

4

1 回答 1

9

根据关于 XMLHttpRequest 的 w3c 规范。http://www.w3.org/TR/XMLHttpRequest/#the-upload-attribute

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

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

于 2013-09-18T02:38:17.260 回答