Decapfour | Voila j'ai un code javascript qui quadn on clique sur un bouton appelle avec l'ajax un script php qui s'execute, et renvoie la reponse de ce script et la met dans le innerHTML d'un div.
Le problème étant que je voudrais afficher ce qu'il y a dans le div, mais que le temps d'execution du script php peut etre varaible.
Le systeme d'execution du script est asynchrone ( ajax oblige ) et donc l'execution du javascript continue, et ce meme si le script php n'a pas fini ses traitements en arrière plan.
Pour faire un alert() du innerHTML rempli, c'est pas l'optimal, de temps en temps le alert est vide, le script marche bien, mais ca peut vite paniquer les utilisateurs.
Ce que j'ai trouvé pour faire un petit peu mieux, c'est le setTimeout() mais on doit mettre un temps fixe, et justement le temps est très varaible, et je vais pas mettre 3 sec d'attente non plus, faut que ce soit un minimum réactif, sinon les utilisateurs vont cliquer 50 fois sur le bouton.
Code :
- function modification (valeur, numprix, numprod, dispo1, dispo2, nomprod, option1, dateprod ){
- var dispo2value = document.getElementById('dispo_'+dispo2).value;
- var option2value = document.getElementById('option_'+dispo2).value;
- var seuil2value = document.getElementById('seuil_'+dispo2).value;
- if(parseInt(valeur) == 1){
- var confirmation = confirm('Acceptez vous les modifications? : '+'\n\n'+nomprod+'\n'+dateprod+'\n\n'+'ancienne dispo : '+dispo1+' nouvelle dispo : '+dispo2value+'\n'+'nouveau seuil : '+seuil2value+'\n'+'ancienne option : '+option1+' '+'nouvelle option : '+option2value );
- if(confirmation == true){
- call("modif.php?num_prix="+numprix+"&modif=M&num_prod="+numprod+"&dispo1="+dispo1+"&dispo2="+dispo2value+"&seuil="+seuil2value+"&options1="+option1+"&options2="+option2value+"&modifok=ok" , document.getElementById('retour_modif'));
- setTimeout("alert((document.getElementById('retour_modif').innerHTML));redirection('recherche.php');", 300);//attente de la fin du call
- //ajax = asynchrone, le call tourne mais le js passe quand meme aux instructions suivantes.
- }
- }
- if(parseInt(valeur) == 2){
- var confirmation = confirm('Acceptez vous de supprimer cette date :'+'\n\n'+dateprod+'\n'+nomprod );
- if(confirmation == true){
- call("modif.php?num_prix="+numprix+"&supp=-&num_prod="+numprod+"&dispo1="+dispo1+"&dispo2="+dispo2value+"&seuil="+seuil2value+"&options1="+option1+"&options2="+option2value+"&suppok=ok" , document.getElementById('retour_modif'));
- setTimeout("alert((document.getElementById('retour_modif').innerHTML));redirection('recherche.php');", 300);//attente de la fin du call
- //ajax = asynchrone, le call tourne mais le js passe quand meme aux instructions suivantes.
- }
- }
- }
|
vous cassez pas avec le call, ca appelle un script php et renvoie la reponse ( tous les echos ) dans le innerhtml d'un div ou autre.
vous cassez pas non plus avec les variables, on s'en fous ça marche bien.
le principal c'est dans les deux if, a l'endroit des setTimeout
Ce que je voudrais :
==> Pouvoir faire attendre le javascript de la fin de call
Ce que j'ai essayé :
==> boucle d'attente active, marche pas.(while(document.getElementByid(..).innerHTML ==""
==>setTimeout, pas optimal Message édité par Decapfour le 04-06-2007 à 15:56:21
|