Bonjour,
J'ai un code qui fonctionne bien sous FF mais pas sous IE9.
Il s'agit d'une liste liée. L'utilisateur choisit un serveur, et en fonction du choix qu'il fait, il à le choix entre des noms d'instance coïncidants avec le serveur choisis.
La fonction qui gère la liste liée est : list_liee_serveur_instance()
Apres pas mal de recherche dans mon code grâce à firebug, j'ai pu constater que mon problème vient du fait que xhr responsetext est à null sous IE alors qu'il est bien renseigné sous FF.
Quand je regarde sous IE9 grâce à firbug lite, dans l'onglet "console" je peux voir le POST. Dans les infos du post je peux voir le paramètre que j'envoie : choixServeur = 2 mais dans l'onglet "Response", j'ai null.
On dirai donc que sous IE, mon post ne reçoit aucune réponse.
Si vous avez une idée pour me débloquer, merci à vous
Voici mes codes:
Le fichier "combobox.php" qui affiche les listes liées (qui sont dans des TD):
Code php : 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 <td> Serveur: <br/> <?php $list_deroul_instance = "<select name='id_serveur' id='id_serveur' onchange='list_liee_serveur_instance()'>"; $list_deroul_instance .= "<option value='-1'>---</option>"; foreach($list_serveur as $serv){ $list_deroul_instance .= "<option value='".$serv['s_id']."' "; if(isset($_POST['id_serveur']) && $_POST['id_serveur'] == $serv['s_id']) $list_deroul_instance .= "selected='selected' "; $list_deroul_instance .= ">".$serv['s_serveur']."</option>"; } $list_deroul_instance .= "</select>"; echo $list_deroul_instance; ?> </td> <td> Instance : <br/> <div id='precision_instance' name='precision_instance' style='display:inline'> <?php echo "<select name='select_precision_instance'>"; if(isset($_POST["id_serveur"])){ $res = recup_list("for_web_instance", "i_id, i_nom_instance", "i_fk_serveur_id = '".$_POST["id_serveur"]."' ORDER BY i_nom_instance"); echo "<option value='all'>Toutes les instances</option>"; foreach($res as $cle => $value) { $option = "<option value='".$value["i_id"]."' "; if(isset($_POST['select_precision_instance']) && $_POST['select_precision_instance'] == $value["i_id"]) $option .= "selected='selected' "; $option .= ">".$value["i_nom_instance"]."</option>"; echo $option; } }else{ echo "<option value='-1'>Choisir le serveur</option>"; } echo "</select>"; ?> </div> </td>
Mon code JS :
Le fichier qui est appelé dans le post.
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 function getXhr(){ var xhr = null; 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; } return xhr; }function list_liee_serveur_instance(){ var xhr = 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){ alert("responseXML:" + xhr.responseXML); alert("responseText:" + xhr.responseText); leselect = xhr.responseText; // On se sert de innerHTML pour rajouter les options a la liste document.getElementById('precision_instance').innerHTML = leselect; } } // Ici on va voir comment faire du post xhr.open("POST","controleur/ajaxCombo_box.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, le choix sur lequel portera le rapport sel = document.getElementById("id_serveur"); choix_serveur = sel.options[sel.selectedIndex].value; xhr.send("choixServeur="+choix_serveur); if(choix_serveur == -1){ $('#combo_envoyer').attr('disabled', true); }else{ $('#combo_envoyer').attr('disabled', false); } }
Pour simplifier le test, j'ai commenté la partie avec la requette pour ne faire afficher qu'un "YOOOOO". ça fonctionne bien sous FF mais pas sous IE avec le "YOOOOOO":
Code php : 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 <?php include '../global/config.php'; include '../global/fonction.php'; include '../modele/global.php'; include '../lib/pdo2.php'; echo "<span name='ajax_precision_instance'>"; echo "YOOOO"; /* echo "<select name='select_precision_instance'>"; if(isset($_POST["choixServeur"])){ if($_POST["choixServeur"] == '-1'){ echo "<option value='rien'>Choisir le serveur</option>"; }else{ $res = recup_list("for_web_instance", "i_id, i_nom_instance", "i_fk_serveur_id = '".$_POST["choixServeur"]."' ORDER BY i_nom_instance"); echo "<option value='all'>Toutes les instances</option>"; foreach($res as $cle => $value) { $option = "<option value='".$value["i_id"]."' "; if(isset($_POST['select_precision_instance']) && $_POST['select_precision_instance'] == $value["i_id"]) $option .= "selected='selected' "; $option .= ">".$value["i_nom_instance"]."</option>"; echo $option; } } } echo "</select>"; */ echo "</span>"; ?>
Merci
Partager