IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

jQuery Discussion :

Plusieurs requêtes en même temps [AJAX]


Sujet :

jQuery

  1. #1
    Membre habitué
    Homme Profil pro
    webmaster amateur
    Inscrit en
    Septembre 2017
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Bulgarie

    Informations professionnelles :
    Activité : webmaster amateur

    Informations forums :
    Inscription : Septembre 2017
    Messages : 10
    Par défaut Plusieurs requêtes en même temps
    Hello,

    J'ai une question au sujet de jquery / ajax

    Sur mon site il y a plusieurs <button> qui permettent de charger des données en ajax, ce qui prend quelques secondes

    Quand je clique sur un seul <button> tout se passe normalement

    Mais si je clique sur d'autres boutons avant que la première requete ait fini de charger, seul le premier bouton sur lequel j'ai cliqué affichera les données correctement.

    Firebug me montre que les responses de chaque request sont chargées correctement

    Voici mon code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    $( document ).ready(function() {
     
    	$("body").on("click", "button.toggle", function(){
     
    		currentBtn 	= $(this);
     
    		currentBtn.addClass( "blink" );
     
    		$.post("http://localhost/ajaxcall.php",{ 
     
    			arrayId: currentBtn.val(), 
    			timeout: 5,
     
    		}, function(data, status){
     
    			currentBtn.after( data.output );
     
    		}).done(function( data ) {
     
    		}).fail(function() {
    			alert( "error ajax" );
    		}).always(function() {
     
    			currentBtn.removeClass( "blink" );
     
    		});
    En gros et pour résumer, si je clique sur plusieurs boutons rapidement, les résultats chargés par ajax s'afficheront tous sous le même bouton alors que chaque résultat devrait s'afficher sous le bouton correspondant sur lequel on a cliqué, même si on a cliqué comme un malade sur les boutons

    Est-ce que vous arrivez à repérer l'erreur par hasard ?

    Merci !

  2. #2
    Expert confirmé
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 672
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 672
    Par défaut
    le contenu de "currentBtn" se modifie peut-être entre chaque appel.
    essayez de passer le bouton avec l'argument "context" de la requête AJAX pour que vous puissiez l'utiliser dans les fonctions anonymes.

  3. #3
    Membre habitué
    Homme Profil pro
    webmaster amateur
    Inscrit en
    Septembre 2017
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Bulgarie

    Informations professionnelles :
    Activité : webmaster amateur

    Informations forums :
    Inscription : Septembre 2017
    Messages : 10
    Par défaut
    merci Mathieu !

    J'essaie d'implémenter "context" mais il semblerait que ça bloque le script... en effet, le "alert('ok');" n'est jamais executé
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    $( document ).ready(function() {
     
    	$("body").on("click", "button.toggle", function(){
     
    		currentBtn 	= $(this);
     
    		$.post("http://localhost/ajaxcall.php",{ 
     
    			context:currentBtn
     
    		}, function(data, status){
     
                         alert('ok');  // cette ligne ne sera jamais executée
     
    		}).done(function( data ) {
    		}).fail(function() {
    		}).always(function() {
    		});
    et firebug ne montre pas qu'il y a des erreurs javascript
    par contre si j'attends quelque dizaines de secondes j'ai l'erreur firebug "maximum callstack exceeded"

  4. #4
    Expert confirmé

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 418
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 5 418
    Par défaut
    Salut,

    Si tu cliques plusieurs fois sur un même bouton "comme un malade" il est possible aussi que tu envoies plusieurs fois la même requête avant d'avoir reçu une réponse et que cela pose des conflits. On peut éventuellement désactiver la fonctionnalité onclick du bouton dans le beforesend de la requête ajax et le réactiver dans le done ou le always pour éviter ce genre de problème. C'est ce que je fais en employant la syntaxe longue de jQuery pour les requêtes ajax, mais il y a peut-être des raccourcis pour faire plus rapide et éviter ce genre de problèmes.

  5. #5
    Membre habitué
    Homme Profil pro
    webmaster amateur
    Inscrit en
    Septembre 2017
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Bulgarie

    Informations professionnelles :
    Activité : webmaster amateur

    Informations forums :
    Inscription : Septembre 2017
    Messages : 10
    Par défaut
    j'ai trouvé : il fallait déclarer la variable currentBtn avec var = ce qui permet de ne pas la considérer comme une globale

    Par ailleurs, il faut utiliser "ajax" et non "post" car "post" n'accepte pas "context"

    merci à tous pour l'aide !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [AC-2007] Affichage de plusieurs requête en même temps
    Par ALEX80800 dans le forum Access
    Réponses: 2
    Dernier message: 21/11/2011, 17h19
  2. [AJAX] plusieurs requêtes en même temps
    Par martvefun dans le forum AJAX
    Réponses: 1
    Dernier message: 01/06/2010, 08h19
  3. [MySQL] Faire plusieurs requêtes en même temps
    Par johnson95 dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 17/02/2010, 14h32
  4. Exécuter plusieurs requêtes en même temps
    Par k_boy dans le forum Bases de données
    Réponses: 9
    Dernier message: 21/02/2008, 12h51
  5. [AJAX] Plusieurs requêtes en même temps
    Par mrcmrc dans le forum Général JavaScript
    Réponses: 7
    Dernier message: 15/10/2007, 16h48

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo