11540 sujets

JavaScript, DOM et API Web HTML5

Bonjour,

je synchronise des données de serveur à serveur avec une simple boucle dans une routine php.
Je lance ma routine via une requête ajax avec jquery, jusqu'ici tout va bien.

J'aimerai quand une boucle est terminée afficher un message du style "boucle i synchronisée". Je fais un echo de ce message à la fin de ma boucle, mais je n'arrive pas à dynamiser ce message pendant le traitement. Tous les messages (chaque boucle) s'affichent du coup à la fin du traitement global.

J'ai vu sur quelques sujet l'utilité de la fonction flush() mais sans succès..

Est-ce que quelqu'un pourrait m'orienter, je ne dois pas faire cela correctement.

Merci
Bonjour,

c'est ce que je fait déjà mais les messages ne s'affichent pas au fur et à mesure du traitement, mais tous après le traitement, je ne dois pas avoir la bonne méthode.
Bon à partir de là, je crois que tu va devoir mettre un peu de code, parce que l'on ne peut pas deviner où tu en es. Smiley cligne
bin c'est simple

j'ai une routine php qui boucle (c'est un exemple bidon)

$i = 1;
while ($i < x) {
//Traitement
echo $i.' OK'  //le message à faire apparaître
$i++;
}


la routine est exécutée via ajax jquery (mon code qui pour l'instant n'affiche qu'un message)

function update_mailings() {	
	var data = $('#form_update_mailings').serialize();
	
	$.ajax({
		cache:false,
		type:"post",
		data:data,
		url:"../f_update_mailings.php",
		beforeSend: function(){ 
			$(".loader_work").show();
			document.getElementById("inner_maj").innerHTML = "Synchronisation en cours, veuillez patientez...";
		},
		success:
		function(retour){
			switch(retour) {
				case 'KO_empty':
				$(".loader_work").hide();
				$("#inner_maj").hide();
				alert('Spécifier un mailing_id');
				break;

				case 'KO_sync':
				$(".loader_work").hide();
				$("#inner_maj").hide();
				alert('mailing_id déjà synchronisé');
				break;

				default:
				$(".loader_work").hide();
				document.getElementById("inner_maj").innerHTML = "Synchronisation terminée, veuillez patienter...";
				setTimeout(function() { window.location.href ="list_mailings.php"; }, 2000);
				break;
			}
		}
	});
}
Tout d'abord, je suis ébaubi (oui je sais, c'est classe) quand je vois ton bout de javascript "pur" dans ton jQuery.
// Pourquoi ça...
document.getElementById("inner_maj").innerHTML = "Synchronisation en cours, veuillez patientez...";
// Alors que ça...
$("#inner_maj").html() = "Synchronisation en cours, veuillez patientez...";
// ou ça...
$("#inner_maj").text() = "Synchronisation en cours, veuillez patientez...";


Bon, pour en revenir à ton problème, pour moi, tu ne pourras pas avoir de retour dynamique de cette manière là.
Ajax envoie bien ta requête en asynchrone, mais ton script PHP (qui n'y est pas), te renverra (dans ton callback success) toujours la fin de son script.

Donc à moins de pouvoir faire UN appel ajax pour UNE récurrence de ta boucle PHP, je ne pense pas que tu puisses détecter l'avancement de ton traitement.
Ne sois pas ébaubi ( j'adore ce mot Smiley cligne ), ce n'est pas grave cela fonctionne pareillement, je vais le changer pour te faire plaisir.

Merci pour les quelques explications, je vais regarder ça.