Select Chainée Erreur IE ! XMLHTTPREQUEST
Bonjour
mon problème est pour pas changer lié aux différences entre IE et FF :
Situation :
j'ai 3 select que je veut chainer :
1-Select Site :
2- Select Serveur (disponible au site )
3- Select feature (fonction disponible sur le serveur )
Avec FF tout marche bien ,
Avec IE la première dépendance se fait :
Donc en sélectionnant le Site la liste des serveurs est mise a jour .
Mais en continuant et sélectionnant Un serveur rien ne se passe sur la 3Eme select ( donc features ).
je précise que j'utilise strictement le même procéder en ce qui concerne le JS et le PHP pour gérer la dépendance entre les 3 select.
Néanmoins ce que j'ai remarquer c'est que quand la 2Eme select est mise a jour si je lance un Onchange="getValue()" une simple fonction pour avoir la valeur du selectedIndex ça me donne RIEN sous IE pourtant le SelectedIndex est bien une valeur >0 !!
Voici le code :
le javascript :
Code:
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
|
/*************************************************************************************************
* Function : setXhr()
* Init an XMLHTTPREQUEST
*
**************************************************************************************************/
function setXhr()
{
var xhr;
if(window.XMLHttpRequest) // FIREFOX
xhr = new XMLHttpRequest();
else
if(window.ActiveXObject) // IE
xhr = new ActiveXObject("Microsoft.XMLHTTP");
else
{ // XMLHttpRequest non supporté par le navigateur
}
return xhr;
}
/*************************************************************************************************
* Function : getServer()
* Dynamically got server's list for a given site
*
**************************************************************************************************/
function getServer()
{
var f = document.forms["showData"] ;
var s1 = f.elements["lssite"];
var s2 = f.elements["lsserver"];
var index = s1.selectedIndex;
if(index<0)
f.elements["lsserver"].options.length = 0;
else
{
var xhr = setXhr();
xhr.open("POST", "include/filteredserver.php", true);
xhr.onreadystatechange = function() {
if(xhr.readyState == 4)
eval(xhr.responseText);
}
xhr.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
var data = "site="+escape(s1.options[index].value)+"&form="+f.name+"&select=lsserver";
xhr.send(data);
}
}
/*************************************************************************************************
* Function : getSFeature()
* Dynamically got features 's list for a given server
*
**************************************************************************************************/
function getSFeature()
{
var f = document.forms["showData"] ;
var s1 = f.elements["lsserver"];
var s2 = f.elements["lsfeature"];
var index = s1.selectedIndex;
if(index<0)
f.elements["lsfeature"].options.length = 0;
else
{
var xhr = setXhr();
xhr.open("POST", "include/filteredserver.php", true);
xhr.onreadystatechange = function() {
if(xhr.readyState == 4)
eval(xhr.responseText);
}
xhr.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
var data = "server="+escape(s1.options[index].value)+"&form="+f.name+"&select=lsfeature";
xhr.send(data);
}
} |
Le php pour générer les nouvelles valeurs du select
Code:
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
|
<?php
header('Content-type: text/html; charset=iso-8859-1');
include("dbmanager.php");
dbconnect();
if(isset($_POST[site]))
{
$site = $_POST[site];
$requete = ($site == "All")? "SELECT DISTINCT name FROM server" : "SELECT name FROM server WHERE site='$site'";
$result = request($requete);
echo 'var o = null;';
echo 'var s = document.forms["'.$_POST["form"].'"].elements["'.$_POST["select"].'"];';
echo 's.options.length = 0;';
echo 's.options[s.options.length] = new Option("All");';
while($r = mysql_fetch_array($result))
echo 's.options[s.options.length] = new Option("'.$r[0].'");';
}
if(isset($_POST[server]))
{
$server = $_POST[server];
$requete = ($site == "All")? "SELECT DISTINCT name FROM features where server!='local'" : "SELECT name FROM features WHERE server='$server'";
$result = request($requete);
echo 'var o = null;';
echo 'var s = document.forms["'.$_POST["form"].'"].elements["'.$_POST["select"].'"];';
echo 's.options.length = 0;';
echo 's.options[s.options.length] = new Option("All");';
while($r = mysql_fetch_array($result))
echo 's.options[s.options.length] = new Option("'.$r[0].'");';
}
dbclose();
?> |
Et finalement le HTML du depart :
Code:
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
|
<form name='showData' method="POST" action="index.php?page=data">
<p>
<table class = "specTable">
<tbody class = "specBody">
<tr>
<td>
<label>Site</label>
</td>
<td>
<select name="site" id="lssite" onChange="getServer()">
<option value="All">All</option>
<?php
$rep = request("SELECT DISTINCT site FROM server");
while($data = mysql_fetch_array($rep))
{
if(isset($chsite) && $data[0] == $chsite)
echo "<option value='".$data[0]."' selected='selected'>".$data[0]."</option>";
else
echo "<option value='".$data[0]."'>".$data[0]."</option>";
}
?>
</select>
</td>
<td>
<label>Server</label>
</td>
<td>
<select name="server" id="lsserver" onChange="getSFeature()">
<option value="All">All</option>
<?php
$query = $chsite != "All" ? "SELECT DISTINCT name FROM server WHERE site='$chsite' ORDER BY 'name' ASC" : "SELECT DISTINCT name FROM server";
$rep = request($query);
while($data = mysql_fetch_array($rep))
{
if(isset($chserver) && $data[0] == $chserver)
echo "<option value='".$data[0]."' selected='selected'>".$data[0]."</option>";
else
echo "<option value='".$data[0]."'>".$data[0]."</option>";
}
?>
</select>
</td>
<td>
<label>Feature</label>
</td>
<td>
<select name="feature" id ="lsfeature">
<option value="All">All</option>
<?php
$query = $chserver != "All" ? "SELECT DISTINCT name FROM features WHERE server='$chserver' ORDER BY 'name' ASC" : "SELECT DISTINCT name FROM features WHERE server!='local'";
$rep = request($query);
while($data = mysql_fetch_array($rep))
{
if(isset($chfeature) && $data[0] == $chfeature)
echo "<option value='".$data[0]."' selected='selected'>".$data[0]."</option>";
else
echo "<option value='".$data[0]."'>".$data[0]."</option>";
}
?>
</select>
</td>
<td>
<input type="button" value="Go !" onclick ="validate()" />
</td>
</table>
</p>
</form> |
Merci pour l'aide