Domanda

Ho un rapporto nel nostro sistema interno che può restituire da 1 giorno a un anno intero. Per questo motivo, il rapporto può richiedere 0,5 secondi o più di 45 secondi per generare tutto.

Il rapporto ti consente di modificare una serie di filtri, tutti i quali, quando modificati, attivano una richiesta ajax in modo molto semplice:

var ax = $.ajax({
    type: "GET",
    url: "/blah",
    data: values,
    success: function(data) { .. }
});

Ora, il problema si presenta quando il nostro meraviglioso utente afferma " Oh aspetta! Voglio che questo sia da febbraio, non da gennaio! & Quot ;. Ma una richiesta sta già accadendo da gennaio è un sacco di dati! Quindi, l'utente passa l'opzione data a febbraio e posso vedere la console Javascript inviare una seconda richiesta. Ora ne abbiamo due in corso ed è una corsa !

  

/ report /? start_date = January (Still Loading ...)

     

/ report /? start_date = February (Ehi, sono qui anche adesso!)

Quindi, di solito quello più piccolo verrà caricato prima, ma poi l'altro verrà caricato e sovrascriverà quello che avevano già .. hmm :)

Ho provato a usare ax.abort () inserito dopo la dichiarazione della variabile ax come menzionato qui ma non sembra funzionare.

Quindi ora mi chiedo, cosa mi sto perdendo? Voglio solo terminare la richiesta corrente (lato client, so che non posso farci nulla sul lato server) non appena l'utente cambia alcune opzioni, quindi non ho 2 o più richieste in corso contemporaneamente . L'impostazione di async: false non è un'opzione in quanto blocca semplicemente l'utente.

Grazie in anticipo per il tuo aiuto.

È stato utile?

Soluzione

Puoi dare un'occhiata al ajaxmanager .

Altri suggerimenti

Penso che tentare di interrompere la richiesta precedente non sia una buona soluzione. Forse dovresti usare una soluzione semplice: per ogni richiesta ajax aumenta il contatore in javascript e passalo al callback ajax. Quando si verifica la richiamata, verificare se il contatore della risposta è uguale al valore corrente del contatore. In caso contrario, ignora la risposta: è stata generata da un evento clic obsoleto.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top