Précédent   Forum des professionnels en informatique > Webmasters - Développement Web > AJAX
AJAX Forum sur la programmation AJAX. Avant de poster : Cours AJAX, FAQ AJAX, Toutes les FAQ 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 21/03/2011, 11h12   #1
Membre habitué
 
Avatar de thebarbarius
 
Inscription : octobre 2008
Messages : 745
Détails du profil
Informations forums :
Inscription : octobre 2008
Messages : 745
Points : 139
Points : 139
Par défaut Plusieurs fonctions dans un onclick

Bonjours,

Je sais que des posts a ce sujet existe deja mais ne m'ont en aucun cas aider.

Alors j'untilise AJAX comme si dessus :

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
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
 
// JavaScript Document
var xhr = null; 
var xhr2 = null;
var xhr3 = null;
function getXhr()
{
     if(window.XMLHttpRequest)xhr = new XMLHttpRequest(); 
else if(window.ActiveXObject)
  { 
  try{
     xhr = new ActiveXObject("Msxml2.XMLHTTP");
     } catch (e) 
     {
     xhr = new ActiveXObject("Microsoft.XMLHTTP");
     }
  }
else 
  {
  alert("Votre navigateur ne supporte pas les objets XMLHTTPRequest..."); 
  xhr = false; 
  } 
}
 
function getXhr2()
{
     if(window.XMLHttpRequest)xhr2 = new XMLHttpRequest(); 
else if(window.ActiveXObject) { 
  try { xhr2 = new ActiveXObject("Msxml2.XMLHTTP"); } catch (e)  {
     xhr2 = new ActiveXObject("Microsoft.XMLHTTP"); }
  } else {xhr2 = false;} 
}
 
function getXhr3() {
     if(window.XMLHttpRequest)xhr3 = new XMLHttpRequest(); 
else if(window.ActiveXObject) { 
  try { xhr3 = new ActiveXObject("Msxml2.XMLHTTP"); } catch (e)  {
     xhr3 = new ActiveXObject("Microsoft.XMLHTTP"); }
  } else {xhr3 = false;} 
}
 
function itemDetail(id) {
	getXhr();
	getXhr2();
	getXhr3();
	xhr.onreadystatechange = function() {
		 if(xhr.readyState == 4) if (xhr.status == 200) {
			 document.getElementById('detail').innerHTML=xhr.responseText;
			 document.getElementById('mixing').innerHTML=xhr2.responseText;
			 document.getElementById('drop').innerHTML=xhr3.responseText;
		 }
							}
			xhr.open("GET","view/detail.php?id="+id,true);
			xhr2.open("GET","view/mixing.php?id="+id,true);
			xhr3.open("GET","view/drop.php?id="+id,true);
 
 
	xhr.send(null);
	xhr2.send(null);
	xhr3.send(null);
	}
Comment faire autrement parcque quand la demande est trop grande sa plante !
thebarbarius est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/03/2011, 12h14   #2
Responsable Développement Web

 
Avatar de Bovino
 
Homme Didier Mouronval
Développeur Web
Inscription : juin 2008
Messages : 13 805
Détails du profil
Informations personnelles :
Nom : Homme Didier Mouronval
Âge : 41
Localisation : France, Gironde (Aquitaine)

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : juin 2008
Messages : 13 805
Points : 35 807
Points : 35 807
Ben, tu ne peux pas gérer 3 appels AJAX en parallèle
Par exemple, quand tu fais
Code :
1
2
3
4
5
if(xhr.readyState == 4) if (xhr.status == 200) {
	document.getElementById('detail').innerHTML=xhr.responseText;
	document.getElementById('mixing').innerHTML=xhr2.responseText;
	document.getElementById('drop').innerHTML=xhr3.responseText;
}
qu'est-ce qui te garantit que tu auras reçu toutes les réponses à ce moment ???
__________________
Pas de question technique par MP !
Tout le monde peut participer à developpez.com, vous avez une idée, contactez-moi !
Vous possédez un blog et aimeriez diffuser vos billets sur le forum, contactez-moi !
Mes formations video2brain : La formation complète sur JavaScriptJavaScript et le DOM par la pratiquePHP 5 et MySQL : les fondamentaux
Mon livre sur jQuery
Bovino est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/03/2011, 12h45   #3
Membre habitué
 
Avatar de thebarbarius
 
Inscription : octobre 2008
Messages : 745
Détails du profil
Informations forums :
Inscription : octobre 2008
Messages : 745
Points : 139
Points : 139
Comment faudrai s'y prendre pour transformer mon code en 1 function getxhr().

Et qui aura la meme function.
thebarbarius est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/03/2011, 13h44   #4
Membre Expert
 
Avatar de Eric2a
 
Homme Eric Garidacci
Inscription : septembre 2005
Messages : 1 057
Détails du profil
Informations personnelles :
Nom : Homme Eric Garidacci
Âge : 41

Informations forums :
Inscription : septembre 2005
Messages : 1 057
Points : 1 564
Points : 1 564
Salut,

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
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">
	<head>
		<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
		<title>Test</title>
		<script type="text/javascript">//<![CDATA[
 
			var itemDetail=function(){
				var filename =['detail.php','mixing.php','drop.php'];
				var container=['detail','mixing','drop'];
				var current  =0;
 
				var xhr=(function(){
					var e;
					if(window.XMLHttpRequest)
						xhr = new XMLHttpRequest();
					else if(window.ActiveXObject){
						try{
							xhr=new ActiveXObject("Msxml2.XMLHTTP");
						}catch(e){
							xhr=new ActiveXObject("Microsoft.XMLHTTP");
						}
					}else{
						alert("Votre navigateur ne supporte pas les objets XMLHTTPRequest...");
						xhr=false;
					}
					return xhr;
				})();
 
				return{
					init:function(id){
						if(!xhr)return false;
						xhr.open('GET','view/'+filename[current]+'?id='+id,true);
						xhr.onreadystatechange=function(){
							if(xhr.readyState==4){
								if(xhr.status==200){
									document.getElementById(container[current]).innerHTML=xhr.responseText;
								}else
									alert('Erreur lors de la requête au fichier '+filename[current]);
 
								current++;
								if(current<filename.length)itemDetail.init(id);
							}
						};
						xhr.send(null);
						return true;
					}
				}
			}();
 
			window.onload=function(){itemDetail.init(123);};
		//]]>
		</script>
	</head>
 
	<body>
		<h1>Test</h1>
 
		<h2>Detail</h2>
		<div id="detail"></div>
 
		<h2>Mixing</h2>
		<div id="mixing"></div>
 
		<h2>Drop</h2>
		<div id="drop"></div>
	</body>
</html>
Chaque requête est effectuée une fois la précédente terminée.
__________________

N'oubliez pas le vote des messages utiles ainsi que le Tag [Résolu].

Mon Site Web : Corse - Actualité, Météo, Vidéos, Logiciels, ...
Eric2a est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/03/2011, 03h34   #5
Membre habitué
 
Avatar de thebarbarius
 
Inscription : octobre 2008
Messages : 745
Détails du profil
Informations forums :
Inscription : octobre 2008
Messages : 745
Points : 139
Points : 139
Ok merci, alors de mon coté j'ai fais sa et j'ai par la meme occasion divisé par 7 le temps de chargement de la requete.

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
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
 
// JavaScript Document
var xhr = null; 
var xhr2 = null;
var xhr3 = null;
var xhr4 = null;
function getXhr()
{
     if(window.XMLHttpRequest)xhr = new XMLHttpRequest(); 
else if(window.ActiveXObject)
  { 
  try{
     xhr = new ActiveXObject("Msxml2.XMLHTTP");
     } catch (e) 
     {
     xhr = new ActiveXObject("Microsoft.XMLHTTP");
     }
  }
else 
  {
  alert("Votre navigateur ne supporte pas les objets XMLHTTPRequest..."); 
  xhr = false; 
  } 
}
 
function getXhr2()
{
     if(window.XMLHttpRequest)xhr2 = new XMLHttpRequest(); 
else if(window.ActiveXObject) { 
  try { xhr2 = new ActiveXObject("Msxml2.XMLHTTP"); } catch (e)  {
     xhr2 = new ActiveXObject("Microsoft.XMLHTTP"); }
  } else {xhr2 = false;} 
}
 
function getXhr3() {
     if(window.XMLHttpRequest)xhr3 = new XMLHttpRequest(); 
else if(window.ActiveXObject) { 
  try { xhr3 = new ActiveXObject("Msxml2.XMLHTTP"); } catch (e)  {
     xhr3 = new ActiveXObject("Microsoft.XMLHTTP"); }
  } else {xhr3 = false;} 
}
 
 
function getXhr4() {
     if(window.XMLHttpRequest)xhr4 = new XMLHttpRequest(); 
else if(window.ActiveXObject) { 
  try { xhr4 = new ActiveXObject("Msxml2.XMLHTTP"); } catch (e)  {
     xhr4 = new ActiveXObject("Microsoft.XMLHTTP"); }
  } else {xhr4 = false;} 
}
 
function itemDetail(id) {
	getXhr(); getXhr2(); getXhr3(); getXhr4();
 
	xhr.onreadystatechange = function() {
		if(xhr.readyState == 4 && xhr.status == 200) {
				document.getElementById('1').innerHTML=xhr.responseText;
		}
	}
	xhr.open("GET","view/1.php?id="+id,true);
	xhr.send(null);
 
	xhr2.onreadystatechange = function() {
		if(xhr2.readyState == 4 && xhr2.status == 200) { 
				document.getElementById('2').innerHTML=xhr2.responseText;
		}
	}
	xhr2.open("GET","view/2.php?id="+id,true);
	xhr2.send(null);
 
	xhr3.onreadystatechange = function() {
		if(xhr3.readyState == 4 && xhr3.status == 200) { 
				document.getElementById('3').innerHTML=xhr3.responseText;
		}
	}
	xhr3.open("GET","view/3.php?id="+id,true);
	xhr3.send(null);
}
Quelle methode et la mieux ?
thebarbarius est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/03/2011, 08h50   #6
Membre expérimenté
 
Avatar de nadox
 
Homme
Développeur
Inscription : février 2010
Messages : 360
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Calvados (Basse Normandie)

Informations professionnelles :
Activité : Développeur
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : février 2010
Messages : 360
Points : 545
Points : 545
Bonjour,
Tu as divisé ta requête en quatres requête plutôt...
nadox est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/03/2011, 14h12   #7
Membre habitué
 
Avatar de thebarbarius
 
Inscription : octobre 2008
Messages : 745
Détails du profil
Informations forums :
Inscription : octobre 2008
Messages : 745
Points : 139
Points : 139
Oui je sais.

Mais je voudrais savoir laquelle est mieu niveau performance.
thebarbarius est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/03/2011, 15h21   #8
Membre expérimenté
 
Avatar de nadox
 
Homme
Développeur
Inscription : février 2010
Messages : 360
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Calvados (Basse Normandie)

Informations professionnelles :
Activité : Développeur
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : février 2010
Messages : 360
Points : 545
Points : 545
Petit parallèle :

Tu as 4 personnes qui veulent aller d'un point A à un point B.

Quelles est la solution la plus performante ?
1 - Utiliser 1 voiture pour les 4 personnes ?
2 - Utiliser 1 voiture par personne ?

A ton avis ?
nadox est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/03/2011, 16h57   #9
Membre habitué
 
Avatar de thebarbarius
 
Inscription : octobre 2008
Messages : 745
Détails du profil
Informations forums :
Inscription : octobre 2008
Messages : 745
Points : 139
Points : 139
Je pense pas que sa se passe comme sa pour ce cas.
thebarbarius est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/03/2011, 17h23   #10
Membre Expert
 
Avatar de Eric2a
 
Homme Eric Garidacci
Inscription : septembre 2005
Messages : 1 057
Détails du profil
Informations personnelles :
Nom : Homme Eric Garidacci
Âge : 41

Informations forums :
Inscription : septembre 2005
Messages : 1 057
Points : 1 564
Points : 1 564
Personnellement je pense que l'envoi des requêtes en cascade est préférable.
Il y a moins de sollicitation côté serveur/client en même temps.

Mais ce n'est que mon avis.

PS: 4 personnes désirent franchir une porte.

Quelles est la solution la plus adaptée ?
1 - Une personne à la fois avec respect et bonne humeur (les femmes et les enfants d'abord)
2 - Filer des torniolles pour passer le premier
__________________

N'oubliez pas le vote des messages utiles ainsi que le Tag [Résolu].

Mon Site Web : Corse - Actualité, Météo, Vidéos, Logiciels, ...
Eric2a est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 22/03/2011, 18h31   #11
Membre expérimenté
 
Avatar de nadox
 
Homme
Développeur
Inscription : février 2010
Messages : 360
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Calvados (Basse Normandie)

Informations professionnelles :
Activité : Développeur
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : février 2010
Messages : 360
Points : 545
Points : 545
Je souhaitais simplement souligner le fait qu'un seul objet XHR est nécessaire pour effectuer les requêtes... et que cela n'avait aucun impact sur les performances des requêtes.
Mon petit parallèle n'attendait aucune réponse, il illustrait simplement le non-sens de la question.
Quelles sont les différentes méthodes ? Les deux codes utilisent tout deux plusieurs requêtes ! Par contre, l'un utilise plusieurs objets XHR(voitures), pas l'autre !
Je suis bien entendu d'accord sur le fait qu'il est préférable d'utiliser des requêtes multiples lorsque c'est possible !
nadox est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/04/2011, 13h20   #12
Membre habitué
 
Avatar de thebarbarius
 
Inscription : octobre 2008
Messages : 745
Détails du profil
Informations forums :
Inscription : octobre 2008
Messages : 745
Points : 139
Points : 139
Ce code ne marche pas :

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
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">
	<head>
		<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
		<title>Test</title>
		<script type="text/javascript">//<![CDATA[
 
			var itemDetail=function(){
				var filename =['detail.php','mixing.php','drop.php'];
				var container=['detail','mixing','drop'];
				var current  =0;
 
				var xhr=(function(){
					var e;
					if(window.XMLHttpRequest)
						xhr = new XMLHttpRequest();
					else if(window.ActiveXObject){
						try{
							xhr=new ActiveXObject("Msxml2.XMLHTTP");
						}catch(e){
							xhr=new ActiveXObject("Microsoft.XMLHTTP");
						}
					}else{
						alert("Votre navigateur ne supporte pas les objets XMLHTTPRequest...");
						xhr=false;
					}
					return xhr;
				})();
 
				return{
					init:function(id){
						if(!xhr)return false;
						xhr.open('GET','view/'+filename[current]+'?id='+id,true);
						xhr.onreadystatechange=function(){
							if(xhr.readyState==4){
								if(xhr.status==200){
									document.getElementById(container[current]).innerHTML=xhr.responseText;
								}else
									alert('Erreur lors de la requête au fichier '+filename[current]);
 
								current++;
								if(current<filename.length)itemDetail.init(id);
							}
						};
						xhr.send(null);
						return true;
					}
				}
			}();
 
			window.onload=function(){itemDetail.init(123);};
		//]]>
		</script>
	</head>
 
	<body>
		<h1>Test</h1>
 
		<h2>Detail</h2>
		<div id="detail"></div>
 
		<h2>Mixing</h2>
		<div id="mixing"></div>
 
		<h2>Drop</h2>
		<div id="drop"></div>
	</body>
</html>
thebarbarius est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/04/2011, 14h08   #13
Membre expérimenté
 
Avatar de nadox
 
Homme
Développeur
Inscription : février 2010
Messages : 360
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Calvados (Basse Normandie)

Informations professionnelles :
Activité : Développeur
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : février 2010
Messages : 360
Points : 545
Points : 545
Si tu nous détaille ce qui ne "marche" pas, on pourra peut-être t'aider, non ?
Parce là, le code à l'air bon.
Il charge les données "détails", "mixing" et "drop" pour un élément dont l'id est "123"... c'est pas ce que tu veux ?
nadox est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/04/2011, 14h28   #14
Membre Expert
 
Avatar de Eric2a
 
Homme Eric Garidacci
Inscription : septembre 2005
Messages : 1 057
Détails du profil
Informations personnelles :
Nom : Homme Eric Garidacci
Âge : 41

Informations forums :
Inscription : septembre 2005
Messages : 1 057
Points : 1 564
Points : 1 564
Et en changeant la ligne
par
Code :
if(xhr.status===200||xhr.status===0){
Ou alors les données ne s'actualisent pas ?

Dans ce cas, on peux ajouter un paramètre (GET) contenant une valeur differente à chaque requête...

Remplacer
Code :
xhr.open('GET','view/'+filename[current]+'?id='+id,true);
par
Code :
xhr.open('GET','view/'+filename[current]+'?id='+id+'?time='+Math.random(),true);
__________________

N'oubliez pas le vote des messages utiles ainsi que le Tag [Résolu].

Mon Site Web : Corse - Actualité, Météo, Vidéos, Logiciels, ...
Eric2a est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/04/2011, 15h51   #15
Membre habitué
 
Avatar de thebarbarius
 
Inscription : octobre 2008
Messages : 745
Détails du profil
Informations forums :
Inscription : octobre 2008
Messages : 745
Points : 139
Points : 139
Alors pour la premiere solution inutile :

Ensuite j'ai changé par ce que tu as dit mais rien n'y fait.


Je regarde avec firebug, et en faite il s'avere que aucune page n'est appelé !

Donc evident que cela ne marche pas.



Je pense qu'une erreur plus grosse traine dans ce code.
thebarbarius est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/04/2011, 19h05   #16
Membre expérimenté
 
Avatar de nadox
 
Homme
Développeur
Inscription : février 2010
Messages : 360
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Calvados (Basse Normandie)

Informations professionnelles :
Activité : Développeur
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : février 2010
Messages : 360
Points : 545
Points : 545
Citation:
Envoyé par thebarbarius Voir le message
Je pense qu'une erreur plus grosse traine dans ce code.
Pas plutôt autour de ce code ?

Je n'ai eu aucune difficulté à le tester seul...
Mis à part la première solution proposée puisque je faisait un test sur une page htm simple (le status 0).


Par contre : est-ce qu'il n'y aurait pas autre chose sur le onload de window ?
nadox est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/04/2011, 13h31   #17
Membre habitué
 
Avatar de thebarbarius
 
Inscription : octobre 2008
Messages : 745
Détails du profil
Informations forums :
Inscription : octobre 2008
Messages : 745
Points : 139
Points : 139
Après x test et essaie.

Je ne parviens pas a faire marcher ton code.
Aucune donnée n'est envoyé et par consequent mes div ne s'actualise pas.


J'abandonne.
thebarbarius est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/04/2011, 13h49   #18
Membre Expert
 
Avatar de Eric2a
 
Homme Eric Garidacci
Inscription : septembre 2005
Messages : 1 057
Détails du profil
Informations personnelles :
Nom : Homme Eric Garidacci
Âge : 41

Informations forums :
Inscription : septembre 2005
Messages : 1 057
Points : 1 564
Points : 1 564
Re,

C'est bizarre car je l'ai testé avant de le poster ici.

Citation:
Envoyé par nadox
est-ce qu'il n'y aurait pas autre chose sur le onload de window ?
__________________

N'oubliez pas le vote des messages utiles ainsi que le Tag [Résolu].

Mon Site Web : Corse - Actualité, Météo, Vidéos, Logiciels, ...
Eric2a 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 20h24.


 
 
 
 
Partenaires

Hébergement Web