Flux rss
Collection CommentCaMarche.net
Rechercher : dans
Par : Pertinence Date Nom d'utilisateur
Statut : Non résolu

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

gaerebut, le lundi 18 août 2008 à 14:44:56
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
Répondre à gaerebut  Signaler ce message aux modérateurs Aller au dernier message

1


  • 1
    Ce message vous semble utile, votez !
  • Ce message ne vous semble pas utile, votez !
  • Signaler ce message aux modérateurs
Tiller, le lundi 18 août 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


  • 1
    Ce message vous semble utile, votez !
  • Ce message ne vous semble pas utile, votez !
  • Signaler ce message aux modérateurs
gaerebut, le lundi 18 août 2008 à 15:21:09
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


  • 1
    Ce message vous semble utile, votez !
  • Ce message ne vous semble pas utile, votez !
  • Signaler ce message aux modérateurs
Tiller, le lundi 18 août 2008 à 15:25:41
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


  • 1
    Ce message vous semble utile, votez !
  • Ce message ne vous semble pas utile, votez !
  • Signaler ce message aux modérateurs
gaerebut, le lundi 18 août 2008 à 15:27:25
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


  • 1
    Ce message vous semble utile, votez !
  • Ce message ne vous semble pas utile, votez !
  • Signaler ce message aux modérateurs
gaerebut, le lundi 18 août 2008 à 15:29:37
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


  • 1
    Ce message vous semble utile, votez !
  • Ce message ne vous semble pas utile, votez !
  • Signaler ce message aux modérateurs
Tiller, le lundi 18 août 2008 à 15:32:35
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


  • 1
    Ce message vous semble utile, votez !
  • Ce message ne vous semble pas utile, votez !
  • Signaler ce message aux modérateurs
gaerebut, le lundi 18 août 2008 à 15:35:44
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


  • 1
    Ce message vous semble utile, votez !
  • Ce message ne vous semble pas utile, votez !
  • Signaler ce message aux modérateurs
 Tiller, le lundi 18 août 2008 à 15:40:28
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
Pb interface PHP tableaux liste déroulantes (Résolu) Bonjour, j'ai un pb au niveau de mon interface graphique. En effet, pour le cadre de mon stage je dois réaliser une interface en PHP/javascript ou actionscript. Sur cette interface, un agent doit choisir une periode de référence i.e un mois et... www.commentcamarche.net/forum/affich-6309450-pb-interface-php-tableaux-liste-deroulantes
GanttProject ne veut pas être installé (Résolu) Bonjour, j'aimerai savoir pourquoi je ne peux pas installer GanttProject sur mon PC. Avant que l'installation ne soit terminée, il y a un message d'erreur à propos de java je c'est pas quoi. merci www.commentcamarche.net/forum/affich-7336320-ganttproject-ne-veut-pas-etre-installe
Solution tchat de tchatche com (Résolu) Bonjour, Pour ceux qui ont des problèmes a entrer sur les chats de tchatche, il suffis de savoir que il y'a des versions de IE6 qui sont buggé pour le ajax & javascript. Vous pouvez soit passer sous IE7 (il serait temps tout même !), utiliser... www.commentcamarche.net/forum/affich-6732248-solution-tchat-de-tchatche-com
Essayer un Live-CD sans rebooter la machine * Linux *Qemu Principe Comment ça marche ? Installation de Qemu ACTION Lien Principe Soit vous n'avez pas de CD vierge sous la main, soit la flemmardise vous empêche de graver un disque ou tout simplement car un travail est en cours et il vous... www.commentcamarche.net/faq/sujet-3364-essayer-un-live-cd-sans-rebooter-la-machine-linux
[Javascript] Date de dernière modification de la pageIl est possible, en langage Javascript, d'afficher la date de dernière modification de la page Web grâce à la propriété lastModified de l'objet document : www.commentcamarche.net/faq/sujet-883-javascript-date-de-derniere-modification-de-la-page
Javascript - Modifier la hauteur (height) d'un élément HTMLPour modifier la hauteur d'un élément HTML en javascript, il suffit d'utiliser sa propriété de style "height". Pour cela vous pouvez y faire référence de la manière suivante : Si vous souhaitez connaître la hauteur (height) d'un bloc HTML, il... www.commentcamarche.net/faq/sujet-11740-javascript-modifier-la-hauteur-height-d-un-element-html
Imprimer un document Office depuis 1 page web (Résolu)Je cherche le moyen de lancer l'impression d'un document office (.doc, .xls, etc...) depuis un simple click sur un lien. Chose importante toutefois, il faut que cette action soit totalement transparente pour l'utilistateur.... www.commentcamarche.net/forum/affich-964354-imprimer-un-document-office-depuis-1-page-web
Problème reformatation (Résolu)Bonjour, J'ai un problème, lors de la reformatation de mon PC, j'insert le CD de Windows XP et je fais le boot à partir du CD mais après que l'écran bleu nommé "Installation de Windows" soit terminé et que je puisse choisir entre... www.commentcamarche.net/forum/affich-4257996-probleme-reformatation
Javascript - constante chaine non terminée (Résolu)Bonjour, J'ai un problème de syntaxe dans un javascript externe (fichier .js). Le message que je reçois est "contante de chaîne non terminée". Voici le code : function test_travaux_decoration_quadrillee(rang_onglet_actif) { CSS :... www.commentcamarche.net/forum/affich-5980191-javascript-constante-chaine-non-terminee
Télécharger Vista Shutdown Timer Quand vous téléchargez un fichier volumineux ou quand une installation ou un transfert tarde à se terminer ! Comment faire pour ne pas être obligé d'attendre la fin de la tâche ? VistaShutDownTimer est un programme permettant de définir l'heure... www.commentcamarche.net/telecharger/telecharger-34056194-vista-shutdown-timer
Télécharger JavaScript ObfuscatorJasob JavaScript Obfuscator est un logiciel de protection de code Javascript. Il intègre une interface simple. Il vous permet de convertir votre code Javascript en un code incompréhensible pour l’homme mais lisible pour le navigateur. Le logiciel... www.commentcamarche.net/telecharger/telecharger-34056889-javascript-obfuscator
Télécharger Move ActionSi vous possédez une webcam, utilisez-la intelligemment. En plus de l'utiliser uniquement pour vos conversations en live dans les clients de messagerie ou autres, lancez une application ou arrêter votre ordinateur grâce à elle. Move Action est une... www.commentcamarche.net/telecharger/telecharger-34056433-move-action
Javascript - Les événementsQu'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... www.commentcamarche.net/contents/javascript/jsevent.php3
Javascript - Introduction au langage JavascriptQu'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... www.commentcamarche.net/contents/javascript/jsintro.php3
Javascript - Les variablesLe concept de variable Une variable est un objet repéré par son nom, pouvant contenir des données, qui pourront être modifiées lors de l'exécution du programme. En Javascript, les noms de variables peuvent être aussi long que l'on désire,... www.commentcamarche.net/contents/javascript/jsvar.php3