Bonjour,

je me suis mis il n'y a pas longtemps à l'ajax dans mes codes php. J'ai d'ailleur suivit un tuto du site. Seulement j'ai un problème. Mon code affiche trois select de suite, le premier actualise le second qui lui même actualise le 3ème (j'espère que c'est claire). A la première selction tout va bien, mais dès que je change d'option dans un select qui a déjà actualisé le suivant, je me retrouve avec un select dans un select, et ainsi de suite à chaque actualisation !! Ce qui rend le code pas très fonctionnel. Je voudrai donc savoir si je dois ajouter une condition pour eviter ce problème, sachant que je connait pas trop le JS.

Voici mes sources:

ajax.js:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
			var xhr = null; 
 
			function getXhr(){
				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; 
				} 
			}
 
			/**
			* Ajax qui définit les surfaces et les prix
			*/
			function prix_surface(){
				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('prix').innerHTML = leselect;
					}
				}
 
				// Ici on va voir comment faire du post
				xhr.open("POST","include/game/ajax_prix.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
				sel = document.getElementById('secteur');
				idsecteur = sel.options[sel.selectedIndex].value;
				xhr.send("idSecteur="+idsecteur);
			}
			/**
			* Ajax qui définit le personnel possible
			*/
			function personnel(){
				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('nb_personnes').innerHTML = leselect;
					}
				}
 
				// Ici on va voir comment faire du post
				xhr.open("POST","include/game/ajax_personnel.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
				sel = document.getElementById('prix');
				idprix = sel.options[sel.selectedIndex].value;
				xhr.send("idPrix="+idprix);
			}
index.php:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
 
<?php
if(isset($_SESSION['id'])){
include 'config.php';
echo'<script type="text/javascript">';
include 'include/ajax.js';
echo '</script>';
//Ici on fait les opérations de premières visite | etape 1
 
	if(($_SESSION['initialise'] == '0') && (!isset($_POST['ok']))){
	echo '
	<table border=0 align="justify">
	<tr><td>
	<form action="index.php?cat=game&act=index" name="choix_init" method="POST">
	<INPUT TYPE="radio" CHECKED NAME="choix" VALUE="1"> Je veux creer mon entreprise<br>
	<INPUT TYPE="radio" NAME="choix" VALUE="2"> Je veux devenir salarier<br>
	<INPUT TYPE="radio" NAME="choix" VALUE="3"> Je veux travailler pour la mairie<br><br>
	<input type="submit" name="ok" value="Rejoindre la ville">
	</form>
	</td></tr>
	</table>';
 
	}
 
	//Ici on fait les opérations de premières visite | etape 2
	if(($_SESSION['initialise'] == '0') && ($_POST['ok'] == 'Rejoindre la ville')){
 
		if($_POST['choix'] == 1){
		echo "<form name='entreprise'>
		<select name='secteur' id='secteur' onchange='prix_surface()'>
		<option value='-1'>Aucun</option>";
 
		//Secteur d'activité ||||||||||||||||||||||||||||||||
		for($i=0;$i<sizeof($activites);$i++)
		{
		echo "<option value='".$activites[$i]."'>".$activites[$i]."</option>";
		echo "\n";
		} 
		echo "</select>\n\n";
 
		//Surface |||||||||||||||||||||||||||||
 
		echo "<div id='prix' style='display:inline'>
		<select name='prix' id='prix' onchange='personnel()'>";
		echo "<option value='-1'>Choisir une surface</option>";
		echo "</select>\n\n</div>";
		echo "<div id='nb_personnes' style='display:inline'>
		<select name='nb_personnes' id='nb_personnes'>";
		echo "<option value='-1'>Choisir le nombre d'employés</option>";
		echo "</select>\n\n</div>";
		echo "</form>";		
		}
		}
 
 
	}
 
}
?>
ajax_prix.php

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
 
<?php
include '../../config.php';
        echo "<select name='prix' id='prix' onchange='personnel()'>";
        if(isset($_POST["idSecteur"])){
                for($i=0;$i<sizeof($surface_dispo);$i++)
                {
                $prix = $surface_dispo[$i] * constant('PRIX_'.$_POST['idSecteur']);
                echo '<option value="'.$surface_dispo[$i].'">'.$surface_dispo[$i].' m&sup2;&nbsp;&nbsp;&nbsp;&nbsp;-->
                &nbsp;&nbsp;&nbsp;&nbsp;Prix: '.$prix.' pk </option>';
                echo "\n";
                } 
                }
                echo "</select>\n\n";
?>
ajax_personnel.php

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
 
<?php
include '../../config.php';
        echo "<select name='nb_personnes' id='nb_personnes'>";
        if(isset($_POST["idPrix"])){
                for($i=1;$i<=($_POST["idPrix"]*0.8);$i++)
                {
                echo '<option value="'.$i.'">'.$i.' employ&eacute;(s)</option>';
                echo "\n";
                } 
                }
                echo "</select>\n\n".$_POST["idPrix"];
 
?>
Voila merci.