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.
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%.
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>
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
Partager