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):

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 />
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
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);
}
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
<?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>';
?>
Au final, ma 2e liste déroulante n'est absolument pas remplie...

Des idées? Je suis preneur !