JS - Attendre qu'une action soit terminée ...
gaerebut
Messages postés
1017
Date d'inscription
Statut
Membre
Dernière intervention
-
Tiller Messages postés 781 Date d'inscription Statut Membre Dernière intervention -
Tiller Messages postés 781 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
je réalise en ce moment une petites appli ou je dois avoir un lien pour imprimer .
Hors, avant d'imprimer, je demande à l'utilisateur s'il veut également imprimer des infos supplémentaires sur la page.
Pour afficher ses infos en tant normal (sans vouloir imprimer), il y a un lien sur la page : "Infos supplémentaires ..." puis via un requête AJAX, les infos arrivent en dessous (donc sans rafraichissement).
Donc, imaginons qu'on clique sur oui a la suite de cette question, le contenu viens se placer en dessous et l'impression se lance !
En réalité, l'impression se lance avant que le contenu ne s'affiche !
Elle est appelée après mais se lance avant car pour charger la reqûete ajax il faut que le serveur renvoie les infos et ça prend du temps !
Est-ce que quelqu'un n'aurais pas un petit bout de code genre un return je sais pas quoi (je ne comprend pas très bien tout ça ... lol) ou un truc du genre de façon a dire que quand on a fini de l'instruction on appelle la suivante et uniquement quand la première et fini !
Voici mon code JS pour les interressés :
function imprime(id, nom, divid, num_id, titre, obj)
{
if(confirm("Voulez-vous aussi imprimer les informations sur les contacts/opérateurs ?"))
var bool = 1;//Si on clique sur oui, on affiche les infos supplémentaires
else
var bool = 2;//Si on clique sur non, on retire les infos supplémentaires
deploie(id, nom, 'contenu_info', divid, bool, num_id);//on appelle la fonction qui affiche ou non les infos supplémentaire
/*
Il faudrait une fonction ICI qui permet d'attendre que la fonction deploie soit fini !
*/
//Maintenant on imprime
var zi = document.getElementById(obj).innerHTML;
var f = window.open("", "ZoneImpr", "height=500, width=600,toolbar=0, menubar=0, scrollbars=1, resizable=1,status=0, location=0, left=10, top=10");
f.document.body.style.color = '#000000';
f.document.body.style.backgroundColor = '#FFFFFF';
f.document.body.style.padding = "10px";
f.document.title = titre;
f.document.body.innerHTML += "" + zi + "";
f.window.print();
f.window.close();
return true;
}
A+
Gaerebut
je réalise en ce moment une petites appli ou je dois avoir un lien pour imprimer .
Hors, avant d'imprimer, je demande à l'utilisateur s'il veut également imprimer des infos supplémentaires sur la page.
Pour afficher ses infos en tant normal (sans vouloir imprimer), il y a un lien sur la page : "Infos supplémentaires ..." puis via un requête AJAX, les infos arrivent en dessous (donc sans rafraichissement).
Donc, imaginons qu'on clique sur oui a la suite de cette question, le contenu viens se placer en dessous et l'impression se lance !
En réalité, l'impression se lance avant que le contenu ne s'affiche !
Elle est appelée après mais se lance avant car pour charger la reqûete ajax il faut que le serveur renvoie les infos et ça prend du temps !
Est-ce que quelqu'un n'aurais pas un petit bout de code genre un return je sais pas quoi (je ne comprend pas très bien tout ça ... lol) ou un truc du genre de façon a dire que quand on a fini de l'instruction on appelle la suivante et uniquement quand la première et fini !
Voici mon code JS pour les interressés :
function imprime(id, nom, divid, num_id, titre, obj)
{
if(confirm("Voulez-vous aussi imprimer les informations sur les contacts/opérateurs ?"))
var bool = 1;//Si on clique sur oui, on affiche les infos supplémentaires
else
var bool = 2;//Si on clique sur non, on retire les infos supplémentaires
deploie(id, nom, 'contenu_info', divid, bool, num_id);//on appelle la fonction qui affiche ou non les infos supplémentaire
/*
Il faudrait une fonction ICI qui permet d'attendre que la fonction deploie soit fini !
*/
//Maintenant on imprime
var zi = document.getElementById(obj).innerHTML;
var f = window.open("", "ZoneImpr", "height=500, width=600,toolbar=0, menubar=0, scrollbars=1, resizable=1,status=0, location=0, left=10, top=10");
f.document.body.style.color = '#000000';
f.document.body.style.backgroundColor = '#FFFFFF';
f.document.body.style.padding = "10px";
f.document.title = titre;
f.document.body.innerHTML += "" + zi + "";
f.window.print();
f.window.close();
return true;
}
A+
Gaerebut
A voir également:
- JS - Attendre qu'une action soit terminée ...
- Action - Guide
- Télécharger film d'action gratuitement et rapidement - Télécharger - TV & Vidéo
- Vous devez disposer d'une autorisation pour effectuer cette action - Guide
- Concurrent action - Guide
- Cette action ne peut pas être réalisée car le fichier est ouvert dans system - Guide
8 réponses
function deploie(id, nom, div_contenu, divid, bool, num_id)
{
if(bool == 1)
{
Lister(nom, div_contenu, divid, 'q');
$(id).innerHTML = "Réduire";
}
else
{
$(id).innerHTML = "Plus d'informations ...";
$('fenetre2_'+num_id).innerHTML="";
}
}
{
if(bool == 1)
{
Lister(nom, div_contenu, divid, 'q');
$(id).innerHTML = "Réduire";
}
else
{
$(id).innerHTML = "Plus d'informations ...";
$('fenetre2_'+num_id).innerHTML="";
}
}
var xmlHttp
function Lister(str, page, id, variable)
{
xmlHttp=GetXmlHttpObject()
if (xmlHttp==null)
{
alert ("Votre navigateur ne supporte pas le HTTP Request")
return
}
var url="./pages/"+page+".php"
if(variable == 'q')
url=url+"?q="+str
else if(variable == 'p')
url=url+"?p="+str
url=url+"&sid="+Math.random()
if(id != 0)
xmlHttp.onreadystatechange=getStateChanged(id);
else
xmlHttp.onreadystatechange=getStateChanged(0);
xmlHttp.open("GET",url,true)
xmlHttp.send(null)
}
function Lister(str, page, id, variable)
{
xmlHttp=GetXmlHttpObject()
if (xmlHttp==null)
{
alert ("Votre navigateur ne supporte pas le HTTP Request")
return
}
var url="./pages/"+page+".php"
if(variable == 'q')
url=url+"?q="+str
else if(variable == 'p')
url=url+"?p="+str
url=url+"&sid="+Math.random()
if(id != 0)
xmlHttp.onreadystatechange=getStateChanged(id);
else
xmlHttp.onreadystatechange=getStateChanged(0);
xmlHttp.open("GET",url,true)
xmlHttp.send(null)
}
Pardon j'ai oublié la suite de l'Ajax !
function getStateChanged(id)
{
if (id != 0)
{
if (typeof(id) === 'string')
{
id = document.getElementById(id);
}
return function()
{
if (xmlHttp.readyState==4)
{
id.innerHTML = xmlHttp.responseText;
}
}
}
else
{
return function()
{
if (xmlHttp.readyState==4)
{
act.destroy();
wm = new UI.WindowManager({ container: 'gauche_absolute' });
act = new UI.Window({height: 480, width: 430, top: 60, left: 60, windowManager: wm}).show();
act.maximize();
act.setContent(xmlHttp.responseText);
}
}
}
}
function GetXmlHttpObject()
{
var xmlHttp=null;
try
{
// Firefox, Opera 8.0+, Safari
xmlHttp=new XMLHttpRequest();
}
catch (e)
{
//Internet Explorer
try
{
xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");
}
catch (e)
{
xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
}
}
return xmlHttp;
}
function getStateChanged(id)
{
if (id != 0)
{
if (typeof(id) === 'string')
{
id = document.getElementById(id);
}
return function()
{
if (xmlHttp.readyState==4)
{
id.innerHTML = xmlHttp.responseText;
}
}
}
else
{
return function()
{
if (xmlHttp.readyState==4)
{
act.destroy();
wm = new UI.WindowManager({ container: 'gauche_absolute' });
act = new UI.Window({height: 480, width: 430, top: 60, left: 60, windowManager: wm}).show();
act.maximize();
act.setContent(xmlHttp.responseText);
}
}
}
}
function GetXmlHttpObject()
{
var xmlHttp=null;
try
{
// Firefox, Opera 8.0+, Safari
xmlHttp=new XMLHttpRequest();
}
catch (e)
{
//Internet Explorer
try
{
xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");
}
catch (e)
{
xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
}
}
return xmlHttp;
}
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre questionvar xmlHttp function Lister(str, page, id, variable) { xmlHttp=GetXmlHttpObject() if (xmlHttp==null) { alert ("Votre navigateur ne supporte pas le HTTP Request") return } var url="./pages/"+page+".php" if(variable == 'q') url=url+"?q="+str else if(variable == 'p') url=url+"?p="+str url=url+"&sid="+Math.random() if(id != 0) xmlHttp.onreadystatechange=getStateChanged(id); else xmlHttp.onreadystatechange=getStateChanged(0); xmlHttp.open("GET",url,true) xmlHttp.send(null) } function getStateChanged(id) { if (id != 0) { if (typeof(id) === 'string') { id = document.getElementById(id); } return function() { if (xmlHttp.readyState==4) { id.innerHTML = xmlHttp.responseText; } } } else { return function() { if (xmlHttp.readyState==4) { act.destroy(); wm = new UI.WindowManager({ container: 'gauche_absolute' }); act = new UI.Window({height: 480, width: 430, top: 60, left: 60, windowManager: wm}).show(); act.maximize(); act.setContent(xmlHttp.responseText); } } } } function GetXmlHttpObject() { var xmlHttp=null; try { // Firefox, Opera 8.0+, Safari xmlHttp=new XMLHttpRequest(); } catch (e) { //Internet Explorer try { xmlHttp=new ActiveXObject("Msxml2.XMLHTTP"); } catch (e) { xmlHttp=new ActiveXObject("Microsoft.XMLHTTP"); } } return xmlHttp; } function filtre(id, etat) { if($('indicateur_ville').value != '*' && id) var requete = "SELECT dess.id AS 'Id', dess.id_operateur AS 'Id_Operateur', dess.frequence, dest.ville AS 'Ville', o.nom AS 'Operateur', tf.libelle AS 'Type_Frequence', mt.libelle AS 'Mode_Transport' FROM desserte dess,operateur o, destination dest, type_frequence tf, mode_transport mt WHERE dest.id = dess.id_destination AND o.id = dess.id_operateur AND tf.id = dess.id_type_frequence AND mt.id = dess.id_mode_transport AND mt.visible = 1 AND mt.visible = 1 AND id_destination = '" + $('indicateur_ville').value + "'"; else var requete = "SELECT dess.id AS 'Id', dess.id_operateur AS 'Id_Operateur', dess.frequence, dest.ville AS 'Ville', o.nom AS 'Operateur', tf.libelle AS 'Type_Frequence', mt.libelle AS 'Mode_Transport' FROM desserte dess,operateur o, destination dest, type_frequence tf, mode_transport mt WHERE dest.id = dess.id_destination AND o.id = dess.id_operateur AND tf.id = dess.id_type_frequence AND mt.id = dess.id_mode_transport AND mt.visible = 1 AND mt.visible = 1"; for (i=0;i<=n;i++) { if (TabId[i]==id)//Si etat = 0, la ligne correspondant au tableau JS prend la valeur 0 { if (!etat) { TabVisible[i] = 0; } else//Si etat = 1, la ligne correspondant au tableau JS prend la valeur 1 { TabVisible[i] = 1; } } if(TabVisible[i] == 0) { requete += " AND dess.id_mode_transport <> " + TabId[i]; } } if($('indicateur_ville').value == '*')//Si la valeur de l'input hidden est égal a une etoile (=tout), on va tri toutes les dessertes par le nom de la ville requete += " ORDER BY Ville"; if($('indicateur_ville').value != '') //Vérification: Si on clique sur les filtres sans avoir cliqué sur une villes, les critères s'appliquent mais rien ne s'affiche (car aucune ville choisi) Lister(requete,'contenu', 0, 'p'); } function fenetre() { wm = new UI.WindowManager({ container: 'gauche_absolute' }); act = new UI.URLWindow({height: 480, width: 430, top: 60, left: 60, url: './pages/accueil.html', windowManager: wm}).show(); } function deploie(id, nom, div_contenu, divid, bool, num_id) { if(bool == 1) { Lister(nom, div_contenu, divid, 'q'); $(id).innerHTML = "Réduire"; } else { $(id).innerHTML = "Plus d'informations ..."; $('fenetre2_'+num_id).innerHTML=""; } } function pre_imprime(id, nom, divid, num_id, titre, obj) { if(confirm("Voulez-vous aussi imprimer les informations sur les contacts/opérateurs ?")) var bool = 1;//Si on clique sur oui, on affiche les infos supplémentaires else var bool = 2;//Si on clique sur non, on retire les infos supplémentaires deploie(id, nom, 'contenu_info', divid, bool, num_id);//on appelle la fonction qui affiche ou non les infos supplémentaire setTimeout("imprime(" + titre + ", " + obj + ")",3000); } function imprime(titre, obj) { //Maintenant on imprime var zi = document.getElementById(obj).innerHTML; var f = window.open("", "ZoneImpr", "height=500, width=600,toolbar=0, menubar=0, scrollbars=1, resizable=1,status=0, location=0, left=10, top=10"); f.document.body.style.color = '#000000'; f.document.body.style.backgroundColor = '#FFFFFF'; f.document.body.style.padding = "10px"; f.document.title = titre; f.document.body.innerHTML += "" + zi + ""; f.window.print(); f.window.close(); return true; }
Tu remplaces
Sa devrait etre bon
setTimeout("imprime(" + titre + ", " + obj + ")",3000); par tmpTitre = titre; tmpObj = obj; Et la place de ta fonction tu met celle la: function getStateChanged(id) { if (id != 0) { if (typeof(id) === 'string') { id = document.getElementById(id); } return function() { if (xmlHttp.readyState==4) { id.innerHTML = xmlHttp.responseText; imprime(); } } } else { return function() { if (xmlHttp.readyState==4) { act.destroy(); wm = new UI.WindowManager({ container: 'gauche_absolute' }); act = new UI.Window({height: 480, width: 430, top: 60, left: 60, windowManager: wm}).show(); act.maximize(); act.setContent(xmlHttp.responseText); imprime(); } } } } Et tu met: function imprime() { //Maintenant on imprime var zi = document.getElementById(tmpObj).innerHTML; var f = window.open("", "ZoneImpr", "height=500, width=600,toolbar=0, menubar=0, scrollbars=1, resizable=1,status=0, location=0, left=10, top=10"); f.document.body.style.color = '#000000'; f.document.body.style.backgroundColor = '#FFFFFF'; f.document.body.style.padding = "10px"; f.document.title = tmpTitre; f.document.body.innerHTML += "" + zi + ""; f.window.print(); f.window.close(); return true; }
Sa devrait etre bon