2009-05-30 13 views
41

Ho un sito Web che fa un uso pesante di Ajax. Occasionalmente ho bisogno di caricare file di immagine di grandi dimensioni sulla pagina per l'utente. La mia domanda è, quando questi file di immagine di grandi dimensioni vengono scaricati, c'è un modo per fermarli se, per esempio, l'utente si allontana dalla pagina che mostra l'immagine? Grazie.Javascript: Annulla/interrompi richieste di immagini

+0

State notando che il browser * non * sta annullando download quando ci si sposta da una pagina? Sono d'accordo che dovrebbe Potrei, tuttavia, anche facilmente immaginare che i diversi browser potrebbero avere un comportamento diverso. Purtroppo. – Bruce

+2

Bene, questa è un'applicazione ajax, quindi non ho mai lasciato la pagina, ho provato a "lasciare" la pagina e con mia sorpresa l'immagine NON si interrompe. Wow. Non me l'aspettavo. Sto usando FF 3.0.10/IE8 e Fiddler per guardare il traffico. – frio80

risposta

55

Ho avuto lo stesso problema esatto, quando 'paging' rapidamente i risultati della ricerca degli utenti attraverso (Ajax) il browser stava ancora cercando di scaricare le immagini dei profili per ogni pagina, non solo quello attuale. Questo codice ha funzionato per me, ha invitato l'evento paging poco prima della nuova ricerca è stato eseguito:

//cancel image downloads 
if(window.stop !== undefined) 
{ 
    window.stop(); 
} 
else if(document.execCommand !== undefined) 
{ 
    document.execCommand("Stop", false); 
} 

In sostanza è come se facendo clic sul pulsante "Stop" sul browser.

Testato in IE, Firefox, Chrome, Opera e Safari

+0

Grazie mille molto MyWhirledView. Sono stato alle prese con questo per giorni. – Alex

+1

Purtroppo questo non funziona in safari :( – Alex

+6

Questo * fa * funziona in Safari ... vedi il problema simile e risolvilo qui: http://stackoverflow.com/questions/3146200/stop-loading-of-images- on-a-hashchange-event-via-javascript-or-jquery –

2

Supponendo che si stia utilizzando ajax per caricare le immagini, è possibile interrompere la richiesta nell'evento window.onunload. Dichiarare una variabile globale per l'oggetto XMLHttpRequest che si sta utilizzando.

var xhr; 
//if using the XMLHttpRequest object directly 
//you may already be doing something like this 
function getImage(...){ 
    xhr = new XMLHttpRequest(); 
    xhr.open(....); 
} 

se si utilizza jQuery, è possibile assegnare il valore di ritorno della chiamata $ .ajax() o $ .get per XHR variabile.

xhr = $.ajax(.....); 

Gestire window.onunload e interrompere la richiesta.

window.onunload = function(){ 
    xhr.abort(); 
} 
+0

Non sto usando ajax per caricare le immagini. Pensavo che l'impostazione src = '' avrebbe funzionato, ma non è così. Quello che sto cercando davvero è document.getElementById ('image'). StopLoading(); :) – frio80

-3

La soluzione Poor Mans sarebbe quella di impostare semplicemente la proprietà SRC del tag di immagine su una stringa vuota, o puntare verso un widget.

modificare

visto il tuo commento, ha sorpreso non funziona con la modifica della proprietà SRC a vuoto ... provare a utilizzare un blank.gif o qualcosa del genere.

Se questo non dovesse funzionare, si può essere limitato da architettura del browser, il che significa che sei S.O.L.

0

Riassegnazione il tag SRC per un'immagine diversa non funziona in IE7, continua cercando di scaricare la prima immagine.

Qui è la messa a punto:

ho creato un gestore HTTP che è di tipo JPEG. Contiene codice che non termina mai l'esecuzione. Quindi someImage.src = myhandler.ashx rimarrà perennemente lì carico fino a quando scade.

Nel mezzo di questo, premere un altro pulsante che riassegna l'immagine in un piccolo file di immagine: someImage.src = small.jpg

La richiesta di myhandler.ashx non finisce, anche se abbiamo riassegnato lo src.

Inoltre se effettivamente elimina il someImage.parentNode.removeChild nodo (someImage) è ancora continua a cercare di scaricare myhandler.ashx

Testato con IE7 e monitorato con HTTP Guarda Pro.

+0

Ho una sezione della nostra pagina che voglio che tutto il caricamento dell'immagine si fermi. Ho trovato per IE se vado al nodo genitore e metto innerHTML a "", interrompe tutte le richieste abbastanza Questo funziona solo per IE, Safari e Firefox continueranno a caricare le immagini in modo apparentemente non importa cosa (facendo clic sul pulsante di arresto non è adatto a me per altri motivi) –

3

come questo.

$(img).attr('src',''); 
Problemi correlati