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