Précédent   Forum des professionnels en informatique > Webmasters - Développement Web > JavaScript
JavaScript Forum programmation JavaScript. Lire : Cours JavaScript, FAQ JavaScript, Toutes les FAQ JavaScript et Sources JavaScript
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 20/12/2011, 23h49   #1
Nouveau Membre du Club
 
Inscription : avril 2009
Messages : 89
Détails du profil
Informations forums :
Inscription : avril 2009
Messages : 89
Points : 37
Points : 37
Par défaut Contrôler l'ordre d'execution

Bonjour,

voilà mon code:
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
 
		function addEventSimple(obj,evt,fn){
			if (obj.addEventListener)
				obj.addEventListener(evt,fn,false);
			else if (obj.attachEvent)
				obj.attachEvent('on'+evt,fn);
		}
		var test = document.getElementById('image_animation_back');
	addEventSimple(test,'click', function()
	{
		var redir = this.href;
		this.href = '#';
		go_1();
		document.location.href=redir;
	})
ca consiste à enlever le(s) lien(s) des balise de lien exécuter un script lorsque le client clique et finalement le rediriger sur le lien qui était présent dans la balise. Sauf que je voudrais être sûr que ma fonction go_1() qui elle même contient une fonction soit bien exécutée jusqu'au bout

si toutefois ca peut aider le code de go_1:
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
 
function getXhr(){
                                var xhr = null; 
				if(window.XMLHttpRequest) // Firefox et autres
				   xhr = new XMLHttpRequest(); 
				else if(window.ActiveXObject){ // Internet Explorer 
				   try {
			                xhr = new ActiveXObject("Msxml2.XMLHTTP");
			            } catch (e) {
			                xhr = new ActiveXObject("Microsoft.XMLHTTP");
			            }
				}
				else { // XMLHttpRequest non supporté par le navigateur 
				   alert("Votre navigateur ne supporte pas les objets XMLHTTPRequest..."); 
				   xhr = false; 
				} 
                                return xhr
			}
 
			/**
			* Méthode qui sera appelée sur le click du bouton
			*/
			function go_1(){
				var xhr = getXhr();
				// On défini ce qu'on va faire quand on aura la réponse
				xhr.onreadystatechange = function(){
					// On ne fait quelque chose que si on a tout reçu et que le serveur est ok
					if(xhr.readyState == 4 && xhr.status == 200){
						leselect = xhr.responseText;
						// On se sert de innerHTML pour rajouter les options a la liste
						document.getElementById('image_animation_h1').innerHTML = leselect;
					}
				}
 
				// Ici on va voir comment faire du post
				xhr.open("POST","delete2.php",true);
				// ne pas oublier ça pour le post
				xhr.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
				// ne pas oublier de poster les arguments
				// ici, l'id de l'auteur
				idAddress = 1;
				xhr.send("idAddress="+idAddress);
 
 
				}
voilà d'avance merci à ceux qui prendront le temps de me répondre.
helkøwsky est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/12/2011, 00h13   #2
Membre Expert
 
Avatar de Willpower
 
Homme Boris Dessy
sans emploi
Inscription : décembre 2010
Messages : 872
Détails du profil
Informations personnelles :
Nom : Homme Boris Dessy
Localisation : Belgique

Informations professionnelles :
Activité : sans emploi

Informations forums :
Inscription : décembre 2010
Messages : 872
Points : 1 381
Points : 1 381
même question que ici (il y a 15 jours ) : http://www.developpez.net/forums/d11...ntre-fonction/


en gros tu utilises un appels ajax asynchrone(qui n'attend pas la réponse pour poursuivre) donc ta requête n'est en général pas terminé lors de la redirection de la page.


la solution la plus simple et la plus sale est de simplement changer ton appel asynchrone en appel synchrone.


mais ça bloque ton code et c'est déconseillé.

la solution asynchrone correcte est donc que tu dois alors mettre la suite de tes instructions non pas APèS ta requête ajax mais dans la fonction succes (onReadyStateChange) de celle-ci. (et pour faire ça tout beau tout propre, tu peux même afficher un popup/div pour demander au visiteur de patienter pendant la redirection).



sinon mieux encore, faire comme fb et google des liens de redirection (et de sauvegarde?) du genre :

http://www.google.be/url?sa=t&rct=j&...K17DgFv9vFvQug

http://www.facebook.com/l.php?u=http...OejabN5IPbDu9Q

Code :
<a href="http://www.cible.fr/">lien</a>
de le convertir en :

Code :
<a href="http://www.monsite.com/goto.php?url=www.cible.fr">lien</a>
avec sur ton serveur une page goto qui sauve tes données et qui fait une redirection php sur la page passée par l'url.
Willpower est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/12/2011, 13h07   #3
Nouveau Membre du Club
 
Inscription : avril 2009
Messages : 89
Détails du profil
Informations forums :
Inscription : avril 2009
Messages : 89
Points : 37
Points : 37
Par défaut merci

hello willpower,

après lecture de ces réponses j'ai bien compris je t en remercie.

j'ai donc placé la redirection une fois ce contrôle effectué, j'ai mis la reéponse dans le callback.

Code :
1
2
3
4
5
6
7
8
9
 
if(xhr.readyState == 4 && xhr.status == 200)
 {
	leselect = xhr.responseText;
	// On se sert de innerHTML pour rajouter les options a la liste
	document.getElementById('image_animation_h1').innerHTML = leselect;
        // redirection seulement si on a recu l'information:
        document.location.href=link;
}
helkøwsky est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 05h29.


 
 
 
 
Partenaires

Hébergement Web