Bonjour à tous,
ça fait environ 2 heures que je bloque sur un truc qui doit être particulièrement bête, mais étant donné qu'il s'agit de la première fois que je touche à l'AJAX, je me dis que j'ai du rater quelque chose... En fait, en utilisant Firebug, j'ai constaté qu'aucune réponse n'était renvoyée alors que la variable POST passe parfaitement...
Je précise également que j'ai tenté de "tracer" xhr.responseTest, et celui-ci reste éternellement vide...
Voici le code associé à ces problèmes. Il s'agit en fait simplement de 2 listes déroulantes dont le contenu de la 2e dépend du contenu de la 1ère:
La page PHP contenant les 2 listes déroulantes (volontairement tronquée, le reste du code n'est pas utile ici):
Les 2 fonctions AJAX:
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
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86 <?php session_start(); include('Connect_vectra_test.inc'); include('SQL_functions.inc'); include('PHP_functions.inc'); if(isset($_POST["typeMateriel"])){ $typeMateriel = $_POST["typeMateriel"]; unset($typeRotor); $select = "SELECT te.id, te.etape, te.designation, er.status, er.norme_utilisee, er.critere_acceptation, er.tension_essai_std"; $from = "FROM sgdt.type_essai te, sgdt.essais_rotor er, sgdt.TYPE_MATERIELS tm"; if(isset($_POST["typeRotor"])){ $typeRotor = $_POST["typeRotor"]; $where = "WHERE te.id = er.id_essai AND tm.code = er.type_materiels AND tm.code = '".$typeMateriel."' AND er.code_type_rot = '".$typeRotor."'"; } else{ $where = "WHERE te.id = er.id_essai AND tm.code = er.type_materiels AND tm.code = '".$typeMateriel."'"; } $where .= " ORDER BY te.ordre_chrono"; $essais = select($select, $from, $where); } /* Selection des types de materiels pour la select box. */ $tm_select = "SELECT code, groupe_essais, designation"; $tm_from = "FROM sgdt.type_materiels"; $tm_where = "WHERE groupe_essais IS NOT NULL ORDER BY designation"; $tm = select($tm_select, $tm_from, $tm_where); <html> <head> <title>Liste des essais pour les rotors</title> <meta http-equiv="Content-Type" content="text/html; charset=windows-1252" /> <link rel="stylesheet" type="text/css" href="Vectra_PV_elec.css" title="Default" /> <script language="JavaScript" type="text/javascript" src="Vectra_reg_functions.js"></script> </head> <body> <h2><u>Liste des essais pour les rotors</u></h2> <div class="selectionEssaisStator"> <form action="liste_essais_rotor.php" method="post" id="select" name="select"> <table > <tr> <td>Sélectionnez un type de matériel :</td> <td> <select name="typeMateriel" id="typeMateriel" onchange="fillTypeRotor();"> <option <? if(!isset($typeMateriel)) echo 'selected'; ?> value=""></option> <? $i = 0; while(isset($tm[$i])){ $selected = ""; if(isset($typeMateriel)){ if($typeMateriel == $tm[$i]["CODE"]){ $selected = "selected"; $current_mat = $tm[$i]["CODE"]; } } ?> <option <?= $selected; ?> value="<?= $tm[$i]['CODE']; ?>"> Matériel: <?= $tm[$i]['DESIGNATION']; ?> </option> <? $i++;} ?> </select> </td> </tr> <tr> <td>Sélectionnez un type de rotor :</td> <td> <select id="typeRotor" name="typeRotor" onchange="document.getElementById('select').submit();"> <option value=""></option> </select> </td> </tr> </table> </form> <hr /> </div> <br />
La page PHP exécutée par la requête AJAX:
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 function getXhr(){ var xhr = null; 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; } function fillTypeRotor(){ var xhr = getXhr(); xhr.onreadystatechange = function(){ if(xhr.readyState == 4){ mysel = xhr.responseText; document.getElementById('typeRotor').innerHTML = mysel; } } xhr.open("POST","cmbTypeRotor.php",true); xhr.setRequestHeader('Content-Type','application/x-www-form-urlencoded'); sel = document.getElementById('typeMateriel'); typeMateriel = sel.options[sel.selectedIndex].value; xhr.send('typeMateriel='+typeMateriel); }
Au final, ma 2e liste déroulante n'est absolument pas remplie...
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 <?php include('Connect_vectra_test.inc'); include('SQL_functions.inc'); include('PHP_functions.inc'); ?> <select id="typeRotor" name="typeRotor"onchange="document.getElementById('select').submit();"> <? if(isset($_POST["typeMateriel"])){ if(isset($_POST["typeMateriel"])){ $tr_select = "SELECT code_type_rotor_pv, desc_type_rotor_pv"; $tr_from = "FROM sgdt.type_rotors_pv"; $tr_where = "WHERE code_type_materiels = '".$_POST["typeMateriel"]." 'ORDER BY desc_type_rotor_pv"; $tr = select($tr_select, $tr_from, $tr_where); $i = 0; while(isset($tr[$i])){ echo "<option value='".$tr[$i]["CODE_TYPE_ROTOR_PV"]."'>".$tr[$i]["DESC_TYPE_ROTOR_PV"]."</option>"; $i++; } } } echo '</select>'; ?>
Des idées? Je suis preneur !
Partager