[javascript] Anule todas las instancias de XMLHttpRequest



Answers

Podría implementar una lista de todas las solicitudes de procesamiento:

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
}

Y luego aclarar:

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

Tengo esta línea de código que llama a la función SigWebRefresh a intervalos específicos ( 50 milisegundos).

tmr = setInterval(SigWebRefresh, 50);

SigWebRefresh realiza XMLHTTPRequest :

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

Yo había usado clearInterval que borra un temporizador establecido con el método setInterval ().

 clearInterval(tmr);    

Quiero abortar todo XMLHttpRequest pero xhr2.abort(); solo cancela una instancia de la solicitud. ¿Cómo abortar todo XmlHttpRequest sin completar?




Links