2009-08-17 9 views
12

Si è scoperto che questo era un artefatto di un bug di Firebug. La richiesta Ajax è stata annullata, ma Firebug ha continuato a segnalarlo come attivo. Dettagli here.Interruzione di un jQuery getJSON XMLHttpRequest


devo XMLHttpRequests esecuzione prolungata e ho bisogno di essere in grado di annullare loro in certe circostanze.

Mi è stata richiesta in un modo normale:

ajax = $.getJSON(url + "?updates", function(data) { ...; }); 

Più tardi voglio interrompere questa richiesta, sembra semplice:

ajax.abort(); 

Quando guardo a Firebug però, lo vedo è ancora in esecuzione ...

I console.log ha rilevato il valore di ajax appena prima di provare ad annullarlo, conferma che il suo valore è e XMLHttpRequest (con un readyState di 0).

Esistono restrizioni su come e quando abort() si attiva su XMLHttpRequest?

+0

Quale versione FF? –

+0

La versione è Linux 3.0.13 –

risposta

2

La chiamata all'abortuto ripristina l'oggetto; il gestore di eventi onreadystatechange viene rimosso e readyState viene modificato su 0 (non inizializzato).

non credo che annulli la richiesta stessa, ignora semplicemente qualsiasi risposta (manipolando il gestore di eventi), ma non l'ho ancora provato.

ma consentirà definitivamente di riutilizzare l'oggetto, indipendentemente dal fatto che il browser abbia ancora thread che funzionano con la vecchia richiesta.

+1

Chi stai citando? –

+0

Aah !. Il problema è che finisco con troppe richieste http e il browser si blocca, quindi ho bisogno di terminarlo ... –

+0

la citazione è dal docu di Microsoft javascript. Da questo suppongo che dipenda molto dall'implementazione del browser cosa sta succedendo esattamente.la maggior parte dei browser probabilmente cercherà di terminare con grazia, quindi le connessioni potrebbero rimanere attive ancora per un po 'fino a quando non verranno chiuse definitivamente, ma questa è solo un'ipotesi. – Niko

2

si può dare un'occhiata al JSONP-Plugin Con questo plugin si ha la possibilità di annullare manualmente la richiesta. prendere anche uno sguardo al "a cautionary note" presso la biblioteca tecnica di IBM:

In primo luogo, non v'è alcun trattamento per JSONP chiama errore. Se l'inserimento dello script dinamico funziona, viene chiamato; se no, non succede nulla. Semplicemente fallisce silenziosamente. Ad esempio, non è possibile rilevare un errore 404 dal server. Né puoi cancellare o riavviare la richiesta.

Problemi correlati