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:
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
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); }
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
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_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
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² --> Prix: '.$prix.' pk </option>'; echo "\n"; } } echo "</select>\n\n"; ?>
Voila merci.
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é(s)</option>'; echo "\n"; } } echo "</select>\n\n".$_POST["idPrix"]; ?>
Partager