Aborting the xmlhttprequest(中止 xmlhttprequest)
问题描述
我正在使用 HTML5 上传文件.我有一个按钮单击事件附加到函数 uploadFile().它工作正常.我还有一个单独的按钮来取消上传.我知道我们需要调用
xhr.abort()
但如何访问 uploadCanceled
函数中的 xhr 对象?我可以使 xhr 对象成为全局对象,但这不是正确的方法.有人可以在这里指导我吗?
I am using HTML5 for uploading files. I have a button click event attached to the function uploadFile()
. It works fine. I also have a separate button to cancel the upload. I know we need to call xhr.abort()
but how do I access the xhr object in the uploadCanceled
function? I can make the xhr object global but that is not the proper way. Can someone guide me here?
function uploadFile(){
var filesToBeUploaded = document.getElementById("fileControl");
var file = filesToBeUploaded.files[0];
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.php", true);
var fd = new FormData();
fd.append("fileToUpload", file);
xhr.send(fd);
}
function uploadCanceled(evt) {
alert("Upload has been cancelled");
}
干杯
推荐答案
addEventListener
将设置 uploadCanceled
的上下文 (this
) 为 <代码>xhr:
addEventListener
will set the context (this
) of uploadCanceled
to xhr
:
function uploadCanceled(evt) {
console.log("Cancelled: " + this.status);
}
示例:http://jsfiddle.net/wJt8A/
如果您需要通过取消"单击触发 xhr.abort
,则可以返回引用并在此之后添加所需的任何侦听器:
If, instead, you need to trigger xhr.abort
through a "Cancel" click, you can return a reference and add any listeners you need after that:
function uploadFile() {
/* snip */
xhr.send(fd);
return xhr;
}
document.getElementById('submit').addEventListener('click', function () {
var xhr = uploadFile(),
submit = this,
cancel = document.getElementById('cancel');
function detach() {
// remove listeners after they become irrelevant
submit.removeEventListener('click', canceling, false);
cancel.removeEventListener('click', canceling, false);
}
function canceling() {
detach();
xhr.abort();
}
// detach handlers if XHR finishes first
xhr.addEventListener('load', detach, false);
// cancel if "Submit" is clicked again before XHR finishes
submit.addEventListener('click', canceling, false);
// and, of course, cancel if "Cancel" is clicked
cancel.addEventListener('click', canceling, false);
}, false);
示例:http://jsfiddle.net/rC63r/1/
这篇关于中止 xmlhttprequest的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:中止 xmlhttprequest
基础教程推荐
- html表格如何通过更改悬停边框来突出显示列? 2022-01-01
- 我可以在浏览器中与Babel一起使用ES模块,而不捆绑我的代码吗? 2022-01-01
- 直接将值设置为滑块 2022-01-01
- Vue 3 – <过渡>渲染不能动画的非元素根节点 2022-01-01
- 如何使用JIT在顺风css中使用布局变体? 2022-01-01
- 如何使用TypeScrip将固定承诺数组中的项设置为可选 2022-01-01
- Electron 将 Node.js 和 Chromium 上下文结合起来意味着 2022-01-01
- 用于 Twitter 小部件宽度的 HTML/CSS 2022-01-01
- 自定义 XMLHttpRequest.prototype.open 2022-01-01
- Chart.js 在线性图表上拖动点 2022-01-01