Rechercher : dans
Par :

JS - Attendre qu'une action soit terminée ...

Dernière réponse le 18 aoû 2008 à 15:40:28 gaerebut, le 18 aoû 2008 à 14:44:56 
 Signaler ce message aux modérateurs

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
Il y a 2 règles d'or pour réussir dans la vie :
-Règle 1:  ne jamais dire tout ce que l'on sait...
-Règle 2: ...

Configuration: Windows Vista
Firefox 3.0.1

Meilleures réponses pour « JS Attendre qu'une action soit terminée ... » dans :
YouTube - Vous avez désactivé JavaScript VoirProblème Lorsque vous naviguez sur certains sites, tels que YouTube, ceux-ci affichent le message d'erreur suivant : Vous avez désactivé JavaScript ou bien vous possédez une ancienne version d'Adobe Flash Player. Téléchargez la dernière version...
Nintendo DS : Failed to write a file to your Action Replay VoirIntroduction Problèmes rencontrés Solutions Remettre à zéro votre Action Replay Remettre tous les jeux par défaut sur l'Action Replay Conseil Introduction Une Action Replay est un petit appareil ressemblant fortement à un jeu de...
Javascript - Manipulation des contrôles clavier VoirManipulation des contrôles clavier Cette astuce a pour but de vous faire découvrir la (ou du moins une) manière de contrôler les évènements clavier en javascript. Cela vous permettra de contrôler/attribuer les/des comportements particuliers à...
Javascript - Les événements VoirQu'appelle-t-on un événement? Les événements sont des actions de l'utilisateur, qui vont pouvoir donner lieu à une interactivité. L'événement par excellence est le clic de souris, car c'est le seul que le HTML gère. Grâce au Javascript il est...
Javascript - Introduction au langage Javascript VoirQu'est-ce que le Javascript? Le Javascript est un langage de script incorporé dans un document HTML. Historiquement il s'agit même du premier langage de script pour le Web. Ce langage est un langage de programmation qui permet d'apporter des...
Javascript - l'objet Array VoirLes particularités de l'objet Array L'objet Array est un objet du noyau Javascript permettant de créer et de manipuler des tableaux. Voici la syntaxe à utiliser pour créer une variable tableau : var x = new Array(element1[, element2, ...]); Si...

1

Tiller, le 18 aoû 2008 à 15:20:21

Je peux avoir la fonction deploie? merci =)

On dit que les oiseaux sont libres dans le ciel,
Mais la vraie liberté n'est pas celle d'avoir un endroit
où se poser ?

Répondre à Tiller

2

gaerebut, le 18 aoû 2008 à 15:21:09
  • +1

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="";
}
} Il y a 2 règles d'or pour réussir dans la vie :
-Règle 1:  ne jamais dire tout ce que l'on sait...
-Règle 2: ...

Répondre à gaerebut

3

Tiller, le 18 aoû 2008 à 15:25:41
  • +1

Lister..

On dit que les oiseaux sont libres dans le ciel,
Mais la vraie liberté n'est pas celle d'avoir un endroit
où se poser ?

Répondre à Tiller

4

gaerebut, le 18 aoû 2008 à 15:27:25
  • +1

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)

} Il y a 2 règles d'or pour réussir dans la vie :
-Règle 1:  ne jamais dire tout ce que l'on sait...
-Règle 2: ...

Répondre à gaerebut

5

gaerebut, le 18 aoû 2008 à 15:29:37
  • +1

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;
} Il y a 2 règles d'or pour réussir dans la vie :
-Règle 1:  ne jamais dire tout ce que l'on sait...
-Règle 2: ...

Répondre à gaerebut

6

Tiller, le 18 aoû 2008 à 15:32:35
  • +1

Tu pourrais pas utiliser la balide code pour conservé les tabulations? Sa donne pas envie de lire la..

On dit que les oiseaux sont libres dans le ciel,
Mais la vraie liberté n'est pas celle d'avoir un endroit
où se poser ?

Répondre à Tiller

7

gaerebut, le 18 aoû 2008 à 15:35:44
  • +1

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 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;
} 
Il y a 2 règles d'or pour réussir dans la vie :
-Règle 1:  ne jamais dire tout ce que l'on sait...
-Règle 2: ...

Répondre à gaerebut

8

 Tiller, le 18 aoû 2008 à 15:40:28
  • +1

Tu remplaces

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

On dit que les oiseaux sont libres dans le ciel,
Mais la vraie liberté n'est pas celle d'avoir un endroit
où se poser ?

Répondre à Tiller