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 :

2 appels $.ajax avec jQuery


Sujet :

jQuery

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 3
    Points : 2
    Points
    2
    Par défaut 2 appels $.ajax avec jQuery
    Bonjour à tous,

    Je rencontre actuellement un probleme sur un script ajax devant me permettre d'afficher une barre de chargement lors de l'envoi d'une newsletter à plusieurs abonnés.

    Pour résumer, lors du chargement de la page, j'appel un script d'envoi grâce à la fonction $.ajax, qui me retourne succes ou erreur une fois terminé.

    En parallèle, et toujours en utilisant la fonction $.ajax, j'appel une page qui retourne l'état de l'envoi en pourcentage. Cette fonction est appelé toutes les secondes par le biais d'un timer.

    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
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
     
    <script type="text/javascript">
    <!--
    $(document).ready(function() {
     
        // Initialisation de la barre de progression
        $("#progressbar").progressbar({
            value: 0
       });                            
     
       // Attribution de l'action a effectuer et de l'identifiant du produit concerné
        var id_newsletter = '.$_POST['id_envoi_confirm'].';
     
        // Appel du script d'envoi de la newsletter
        var appel1 = $.ajax({ 
          type: "POST", 
          url: "script-envoi.php", 
          data: "id_newsletter="+id_newsletter, 
          success: function(retour){ 
                      // On affiche la fin de l\'opération
                      if(retour == "succes"){
                        $("#message_envoi").slideDown("slow"); 
                      }else{
                        $("#progressbar").progressbar("option", "value", 0);
                        $("#message_erreur").slideDown("slow"); 
                      }
                   }
          });
     
        // Lancement du timer de controle d'envoi
        $(document).everyTime(1000, function(i) {
          // Appel du script de controle d'envoi de la newsletter
          var appel2 = $.ajax({ 
            type: "POST", 
            url: "script-etat-envoi.php",
            data: "controle=controle-envoi", 
            success: function(pourcentage){ 
                        // Mise à jour de la barre de progression
                        $("#progressbar").progressbar("option", "value", pourcentage); 
                        $("#pourcentage").html(pourcentage);
                     } 
          });
        });
     
      });
    -->
    </script>
    Le script d'envoi s'exécute bien et retourne succes. Malheureusement, la barre de progression elle ne s'éxécute qu'une seul fois, une fois le script d'envoi terminé, et passe donc directement à l'état 100%.

    Il semble donc que le timer ne se lance pas toute les secondes comme prévu, mais seulement à la fin de l'exécution et du retour du script d'envoi.
    Pour information j'utilise le plugin timers de jQuery et jQuery-ui pour la gestion de la barre de progression.

    Si vous avez une idée, je suis preneur.
    Merci d'avance pour vos conseils.

    Samuel

  2. #2
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 16
    Points : 20
    Points
    20
    Par défaut
    Bonjour,
    Ne te serait-il pas possible de mettre le code permettant d'afficher la barre de chargement dans une fonction puis d'appeler cette fonction avec la méthode $.ajaxSend() ou $.ajaxStart() ?

    Je n'ai ps testé mais c'est une idée qui, je l'espère, pourra t'aider.

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 3
    Points : 2
    Points
    2
    Par défaut
    Bonjour et merci pour ton idée clemaez.

    Malheureusement cela ne change rien. Il semble que toute les opérations que je lance s'exécutent bien, à la seule exception que le timer semble être bloqué par l'appel du script d'envoi. Une fois celui-ci terminé et après son retour, le timer se lance et exécute bien mon script de contrôle d'envoi.

    J'aurais simplement aimé que le contrôle sur le script d'envoi s'exécute simplement toutes les secondes, indépendamment de l'appel ou du retour de l'appel au script d'envoi.

    Si quelqu'un a une autre proposition ? On dirait que mes 2 appels $.ajax ne peuvent s'exécuter en même temps.

    Merci encore.

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 16
    Points : 20
    Points
    20
    Par défaut
    Je vois que ton timer est sur 1000ms, es-tu sur que ta requête appel1 dure plus longtemps que 1000ms ?

    Tes 2 requêtes sont appelés au chargement de la page ce que je trouve bizarre. A moins que ton script ne soit contenu dans une page intermédiaire du genre :

    formulaire.php ---$_POST---> ajax.php ---$_POST---> traitement.php

    Peux-tu en dire plus sur les éléments que tu as, le fonctionnement et le but ?

    Si tu utilises la structure que j'ai cité précédemment as-tu essayer d'exécuter les 2 requetes à l'aide de l'évènement submit() ? (Bien entendu dans ce cas la page ajax.php n'est plus utile puisque tu met tes requêtes dans ta page formulaire.php)

  5. #5
    Candidat au Club
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 3
    Points : 2
    Points
    2
    Par défaut
    Bien joué clemaez

    En effet, sur de moi je n'avais pas contrôlé la durée d'éxécution de mon script.
    Tout fonctionne désormais.

    Un grand merci à toi pour tes remarques

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

Discussions similaires

  1. Imprimer le résultat d'un appel Ajax avec jQuery
    Par redah75 dans le forum jQuery
    Réponses: 5
    Dernier message: 14/05/2012, 09h03
  2. Appel Ajax avec jQuery : $.ajax is not a function
    Par Grulf dans le forum jQuery
    Réponses: 2
    Dernier message: 18/02/2011, 11h47
  3. [JQuery]FCK editor en ajax avec Jquery
    Par dembroski dans le forum jQuery
    Réponses: 1
    Dernier message: 10/09/2008, 22h55
  4. [JQuery] Requête ajax avec jQuery
    Par ApheX2 dans le forum jQuery
    Réponses: 3
    Dernier message: 28/08/2008, 22h40
  5. ajax avec jquery
    Par artotal dans le forum jQuery
    Réponses: 14
    Dernier message: 20/07/2008, 22h26

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