Aborting the xmlhttprequest

前端 未结 4 911
臣服心动
臣服心动 2020-12-09 17:20

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

4条回答
  •  Happy的楠姐
    2020-12-09 18:00

    addEventListener will set the context (this) of uploadCanceled to xhr:

    function uploadCanceled(evt) {
        console.log("Cancelled: " + this.status);
    }
    

    Example: http://jsfiddle.net/wJt8A/


    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);
    

    Example: http://jsfiddle.net/rC63r/1/

提交回复
热议问题