Condizioni di gara dell'Ajax

8

Esiste uno schema o un modo standard per gestire le condizioni di gara dell'Ajax? Prendi il seguente esempio. Hai due tavoli. Facendo clic su una riga sulla tabella 1 rimuovi i dati dal DB e quindi aggiorna la tabella 2 (che ora mostrerà tutte le righe della tabella 1 meno la riga su cui è stato fatto clic).

Se qualcuno su cui fare clic su un gruppo di righe in rapida successione, potresti ottenere uno scenario in cui la tabella 2 non viene aggiornata per tutti i clic su problemi di timing / lag.

Quale potrebbe essere un buon modo per avvicinarsi a questo? Stavo pensando di usare una possibile coda ma questo tipo di sconfitte ha lo scopo di farlo in modo asincrono. Tuttavia, avrei comunque il vantaggio dell'interfaccia utente non bloccare.

    
posta Ominus 11.05.2012 - 22:11
fonte

3 risposte

8

Solo un pensiero, forse potresti creare un elenco per i tuoi metodi di callback Ajax. Si avvolgerebbe il proprio callback Ajax effettivo in un metodo che aggiunge quella richiamata a uno slot in un elenco.

Questo elenco attende i callback in un ordine specifico e viene eseguito solo se l'elemento principale (il callback che si desidera chiamare per primo) viene riempito.

    
risposta data 11.05.2012 - 22:20
fonte
7

Questa non è una condizione di gara.

Una condizione di competizione si verifica quando il comportamento tra due thread asincroni diventa indefinito. È possibile risolvere questo problema annidando la richiamata dalla prima chiamata

    
risposta data 11.05.2012 - 22:22
fonte
6

In generale i callback sono uno strumento universale per gestire le attività asincrone e infatti i callback sono il meccanismo per gestire le richieste AJAX in JavaScript. Nel contesto della richiamata puoi anche fare riferimento alla riga su cui si fa clic (se chiusa in chiusura). Puoi trovare i seguenti articoli utili: jQuery differito e Uso di Deferred in jQuery

Un'altra cosa che dovresti avere in mente, se l'utente è autorizzato a fare clic su più pulsanti, è che verrà avviata più richiesta. Tuttavia, diversi browser possono gestire contemporaneamente un numero diverso di richieste AJAX: concurrent-ajax-XMLHttpRequest-richieste . Per ovviare a questo devi implementare alcune code di richieste di base.

    
risposta data 14.05.2012 - 09:51
fonte

Leggi altre domande sui tag