Question

Dans notre système interne, un rapport peut renvoyer des données allant de 1 jour à une année complète. Pour cette raison, le rapport peut prendre 0,5 seconde ou plus de 45 secondes pour tout générer.

Le rapport vous permet de modifier de nombreux filtres qui, s’ils sont modifiés, déclenchent très simplement une requête ajax:

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

Maintenant, le problème survient lorsque nos merveilleux utilisateurs nous disent "Oh, attends!" Je veux que ce soit à partir de février, pas de janvier! Mais, une demande est déjà en train de se produire car janvier contient beaucoup de données! Donc, l’utilisateur passe l’option de date à février et la console Javascript envoie une deuxième demande. Maintenant nous en avons deux et c’est une course!

  

/ report /? start_date = January (Chargement en cours ...)

     

/ report /? start_date = February (hé, je suis ici aussi!)

Ensuite, en général, le plus petit se charge plus tôt, mais l'autre se charge et écrase celui qu'il avait déjà .. hmm:)

J'ai essayé d'utiliser ax.abort () après la déclaration de la variable ax , comme indiqué ici , mais cela ne semble pas fonctionner.

Alors maintenant je me demande, qu'est-ce qui me manque? Je veux juste tuer la requête en cours (côté client, je sais que je ne peux rien y faire du côté serveur) dès que l'utilisateur modifie certaines options, de sorte que deux ou plusieurs requêtes ne sont pas envoyées en même temps. . La définition de async: false n'est pas une option, elle verrouille simplement l'utilisateur.

Merci d'avance pour votre aide.

Était-ce utile?

La solution

Vous pouvez consulter le plug-in ajaxmanager .

Autres conseils

Je pense qu'essayer d'avorter une requête précédente n'est pas une bonne solution. Vous devriez peut-être utiliser une solution de contournement simple - pour chaque compteur d’augmentation de requête ajax en javascript, et transmettez-le au rappel ajax. Lorsque le rappel a lieu, vérifiez si le compteur de la réponse est identique à la valeur actuelle du compteur. Sinon, ignorez la réponse - elle a été déclenchée par un événement de clic obsolète.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top