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 : Tout sélectionner
for ($i = 0; $i < 10; $i++)
{
ob_start();
ob_implicit_flush(true);
echo 'Traitement '.$i.' : terminé<br>';
ob_end_flush();
ob_flush();
sleep(10);
}Code : Tout sélectionner
$.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');
}
});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.