javascript - XMLHttpRequest के सभी उदाहरणों को निरस्त करें




ajax abort (2)

मेरे पास इस कोड की पंक्ति है जो फ़ंक्शन SigWebRefresh निर्दिष्ट अंतराल पर ( 50 मिलीसेकेंड) कॉल करता है।

tmr = setInterval(SigWebRefresh, 50);

SigWebRefresh करता है:

function SigWebRefresh(){   
    xhr2 = new XMLHttpRequest();    
    xhr2.open("GET", baseUri + "SigImage/0", true );
    xhr2.responseType = "blob"; 
    xhr2.onload = function (){
        var img = new Image();      
        img.src = getBlobURL(xhr2.response);        
        img.onload = function (){           
           Ctx.drawImage(img, 0, 0);
           revokeBlobURL( img.src );
           img = null;
        }
    }   
    xhr2.send(null);
}

मैंने clearInterval का उपयोग किया था जो सेट clearInterval () विधि के साथ एक टाइमर सेट को साफ़ करता है clearInterval

 clearInterval(tmr);    

मैं सभी XMLHttpRequest को रोकना चाहता हूं लेकिन xhr2.abort(); केवल अनुरोध के एक उदाहरण को बंद कर देता है सभी अपूर्ण XmlHttpRequest को कैसे रद्द करें?


आप सभी संसाधन अनुरोधों की एक सूची लागू कर सकते हैं:

function remove(array, element){
    var index = array.indexOf(element);
    if (index > -1) {
        array.splice(index, 1);
    }
}

var all_requests = [] // The list of requests that are processing
function SigWebRefresh(){   
    var xhr2 = new XMLHttpRequest();    
    xhr2.open("GET", baseUri + "SigImage/0", true );
    xhr2.responseType = "blob"; 
    xhr2.onload = function (){
        var img = new Image();      
        img.src = getBlobURL(xhr2.response);        
        img.onload = function (){           
           Ctx.drawImage(img, 0, 0);
           revokeBlobURL( img.src );
           img = null;
           remove(all_requests, xhr2); // Make sure to remove already finished requests from your list
        }
    }   
    xhr2.send(null);
    all_requests.push(xhr2); // Add processing request to the list
}

और फिर स्पष्ट करने के लिए:

for(var i in all_requests)
    all_requests[i].abort();
all_requests = [] // Clear the list of requests

हर xhr2 चर को एक सरणी में धकेलने का प्रयास करें, Array.prototype.forEach का उपयोग करें। Array.prototype.forEach प्रत्येक xhr2 चर को Array.prototype.forEach करने के लिए

var requests = [];

function SigWebRefresh(){   
    xhr2 = new XMLHttpRequest();
    requests.push(xhr2);    
    xhr2.open("GET", baseUri + "SigImage/0", true );
    xhr2.responseType = "blob"; 
    xhr2.onload = function (){
        var img = new Image();      
        img.src = getBlobURL(xhr2.response);        
        img.onload = function (){           
           Ctx.drawImage(img, 0, 0);
           revokeBlobURL( img.src );
           img = null;
        }
    }   
    xhr2.send(null);
}

// abort all requests
requests.forEach(function(request) {
  request.abort()
})




thread-abort