Home » Web Development » jQuery » Come abortire una post javascript

Come abortire una post javascript

Share on FacebookTweet about this on TwitterShare on Google+Share on LinkedInBuffer this page

Se avete già avuto qualche esperienza con degli script javascript che eseguono delle post vi sarà certamente capitato di avere a che fore con i classici problemi dovuti all’attesa dei tempi di risposta del server. La maggior parte di questi problemi è dovuta al fatto che mentre la post è in attesa della risposta il nostro script va avanti ad eseguire operazioni e questo potrebbe creare delle concorrenze.

Facciamo abortire una post javascript

Ipotiziamo di dover fare una post che al .change() di un input interroghi il server passando i dati inseirti in quell’input. Può capitare che mentre noi siamo in attesa della risposta del server l’utente modifichi nuovamente il valore alla nostra input, o magari ad un’altra collegata alla stessa operazione (pensiamo magari ad una form). Il server non eseguirà le due post javascript in maniera sequenziale, ma le eseguirà in contemporanea. In un mondo ideale la prima post ad essere eseguita dovrebbe essere anche la prima a restituire i risultati, ma non è così.

Pensate appunto all’esempio di una form con diversi parametri, al .change() di una input del nostro form dobbiamo eseguire una post javascript per andare a eseguire una query sul DB e restituire i risultati. Come potete immaginare le mia prime post avranno pochi parametri e tanti risultati, invece, proseguendo la compilazione del form, le query che il server dovrà eseguire saranno sempre più precise e con meno risultati, per cui più veloci.

Potrei finire con l’avere una stampa dei risultati precedenti che mi sovrascrive una successiva perchè le due post javascript non hanno risposto nella sequenza ideale. Come risolvere questo problema?

Facendo abortire le post javascript precendenti all’ultima da eseguire

Se ci pensate, nell’esempio della form di prima, se arriviamo a dover eseguire una post, non ci interessa che vengano stampati i risultati delle post precendenti. Tanto quelli utili saranno sempre quelli dell’ultimo inserimento; per cui potremmo tranquillamente farle abortire in modo che non possano interferire con la stampa dei risultati corretti.

Come spesso accade ci viene in aiuto il jQuery in questo, fornendoci la possibilità di assegnare la nostra post ad una variabile

var xhr = $.ajax({
    url: 'mypage.php',
    success: function(data) {
//      Le operazioni da fare in caso di successo della Post javascript 
    }
});

Adesso che abbiamo la nostra post all’interno di una variabile possiamo tranquillamente richiamare il metodo .abort() sulla nostra post javascript e farla abortire quando più ci aggrada. Senza che questa possa restituire risultati.

xhr.abort();

Quindi tornando all’esempio della nostra form, potremmo inizializzare la variabile xhr usata nel nostro script come una variabile globale e poi assegnargli di volta in volta l’ultima post che ci serve, ma prima di fare questo potremmo richiamare il metodo .abort() per far abortire eventuali post javascript in esecuzione già collegate a xhr e quindi essere sicuri che alla fine di tutto, a essere stampati saranno i risultati dell’ultima post richiamati.

Share on FacebookTweet about this on TwitterShare on Google+Share on LinkedInBuffer this page

Resta sempre aggiornato

Stai tranquillo! Non invio E-mail di Spam e non faccio decine di invi ogni settimana. Ti invierò di tanto in tanto un messaggio per tenerti aggiornato sulle novità e sui nuovi articoli!
Email
Secure and Spam free...