Bonjour,
Je poste ce message parce que j'ai beau chercher un peu partout sur le net, je ne trouve pas de réponse à cette question.
J'ai un gros traitement qui est lancé à partir d'un appel ajax (via jQuery) et je voudrais afficher en temps réel des messages d'avancement (ou mette à jour un message d'une fenêtre modale par exemple) au fur et à mesure que le traitement avance.
Je sais qu'il est possible de forcer le navigateur a affiché quelque chose même si la page n'a pas fini de charger avec les fonctions flush() ou ob_flush().
J'ai d'ailleurs ce bout de code qui fonctionne bien lorsque je l'appelle avec mon navigateur mais pas lorsque je l’appelle en ajax :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 for ($i = 0; $i < 10; $i++) { ob_start(); ob_implicit_flush(true); echo 'Traitement '.$i.' : terminé<br>'; ob_end_flush(); ob_flush(); sleep(10); }
J'appelle ce code avec un appel de ce genre :
Code JavaScript : 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 $.ajax({ type: 'POST', url: 'test.php', cache: true, error: function (xhr, ajaxOptions, thrownError) { alert(xhr.responseText); alert(thrownError); }, xhr: function (x) { console.log(x); var xhr = new window.XMLHttpRequest(); //Download progress xhr.addEventListener("progress", function (evt) { console.log(evt); $('#message').append(evt.target.response); }, false); return xhr; }, beforeSend: function () { console.log('beforeSend'); }, complete: function () { console.log('complete'); }, success: function (json) { console.log('fin'); } });
J'ai analysé le retour sur la console et en fait, je me rends compte que le message est concaténé :
1. Après le premier traitement j'ai : Traitement 1 : terminé<br>.
2. Après le deuxième traitement j'ai : Traitement 1 : terminé<br>Traitement 2 : terminé<br> au lieu d'avoir que Traitement 2 : terminé<br>.
3. Après le troisième traitement j'ai : Traitement 1 : terminé<br>Traitement 2 : terminé<br>Traitement 3 : terminé<br> au lieu d'avoir que Traitement 3 : terminé<br>.
Avez-vous une idée de comment faire ?
Je vous remercie par avance pour votre aide.
Partager