Salut, j'utilise le ajax pour alimenté 3 select. Cependant, seulement la dernière appelle à ma page s'effectue.

Mon select qui rempli mes autre select
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
 
<tr>
        <td>
        <b>Alliage</b>
        </td>
        <td>
        <select name="alliage" class="light" onchange="fill_infos_modele(this.value);fill_infos_couleur_int(this.value);fill_infos_couleur_ext(this.value);">
        <option value="none">[Veuillez faire votre sélection]
        <%
        for (@$alliage) {
                print qq|<option value=$_->{alliage_id}>$_->{alliage}|;
        }
        %>
        </select>
        </td>
</tr>
Mon code 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
 
function getHTTPObject() {
  var xmlhttp;
  /*@cc_on
  @if (@_jscript_version >= 5)
    try {
      xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
      } catch (e) {
      try {
        xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
        } catch (E) {
        xmlhttp = false;
        }
      }
  @else
  xmlhttp = false;
  @end @*/
  if (!xmlhttp && typeof XMLHttpRequest != 'undefined') {
    try {
      xmlhttp = new XMLHttpRequest();
      } catch (e) {
      xmlhttp = false;
      }
    }
  return xmlhttp;
  }
var http = getHTTPObject();
Mon javascript qui rempli mes select
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
 
function fill_infos_modele(alliage_id) {
        //modèle
        http.open("GET", "ajax_function_garaga.asp?fct=1&alliage_id=" + escape(alliage_id), true);
        http.onreadystatechange = handleHttpResponse_modele;
        http.send(null);
        alert(54524);
}
 
function fill_infos_couleur_int(alliage_id) {
        //couleur_int
        http.open("GET", "ajax_function_garaga.asp?fct=2&alliage_id=" + escape(alliage_id) + "&date="+escape((new Date).getTime()), true);
        http.onreadystatechange = handleHttpResponse_couleur_int;
        http.send(null);
        alert(4543);
}
 
function fill_infos_couleur_ext(alliage_id) {
        //couleur ext
        http.open("GET", "ajax_function_garaga.asp?fct=3&alliage_id=" + escape(alliage_id) + "&date="+escape((new Date).getTime()), true);
        http.onreadystatechange = handleHttpResponse_couleur_ext;
        http.send(null);
}
 
function handleHttpResponse_modele() {
        if (http.readyState == 4) {
                results = http.responseText.split("~~");
                for (i = document.garaga.modele.length; i > 0; i--) {
                        document.garaga.modele.options[i] = null;
                }
                cmp = 1;
                for (i = 0; i < results.length -1; i++) {
                        document.garaga.modele.options[cmp] = new Option(unescape(results[i]), unescape(results[i]));
                        cmp++;
                }
        }
}
 
function handleHttpResponse_couleur_int() {
        if (http.readyState == 4) {
                results = http.responseText.split("~~");
                for (i = document.garaga.couleur_int.length; i > 0; i--) {
                        document.garaga.couleur_int.options[i] = null;
                }
                cmp = 1;
                for (i = 0; i < results.length -1; i++) {
                        document.garaga.couleur_int.options[cmp] = new Option(unescape(results[i]), unescape(results[i]));
                        cmp++;
                }
        }
}
function handleHttpResponse_couleur_ext() {
        if (http.readyState == 4) {
                results = http.responseText.split("~~");
                for (i = document.garaga.couleur_ext.length; i > 0; i--) {
                        document.garaga.couleur_ext.options[i] = null;
                }
                cmp = 1;
                for (i = 0; i < results.length -1; i++) {
                        document.garaga.couleur_ext.options[cmp] = new Option(unescape(results[i]), unescape(results[i]));
                        cmp++;
                }
        }
}
Ma page qui pompe les donnée de ma BD
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
 
<%
use strict;
use Constants;
my $username;
my $dbh = DBConnect::get_dbh();
my $fct = $Request->QueryString('fct');
my $alliage_id = $Request->QueryString('alliage_id');
if ($fct eq 1) {
 
        ## modèle
        my $sql = "SELECT modele FROM garaga_modele WHERE alliage_id = ? ORDER BY modele";
        my $sth = $dbh -> prepare($sql);
        $sth -> execute($alliage_id);
        my @list;
        while (my $tmp = $sth->fetchrow_hashref()) {
                push(@list, $Server->URLEncode("$tmp->{modele}"));
        }
        $sth -> finish();
        my $message;
        for (@list) {
                $message .= "$_~~";
        }
        warn "ici";
        print $message;
} elsif ($fct eq 2) {
 
        ## couleur intérieur
        my $sql = "SELECT couleur_int FROM garaga_couleur_int WHERE alliage_id = ? ORDER BY couleur_int";
        my $sth = $dbh -> prepare($sql);
        $sth -> execute($alliage_id);
        my @list;
        while (my $tmp = $sth->fetchrow_hashref()) {
                push(@list, $Server->URLEncode("$tmp->{couleur_int}"));
        }
        $sth -> finish();
        my $message;
        for (@list) {
                $message .= "$_~~";
        }
        warn "ici2";
        print $message;
} elsif ($fct eq 3) {
 
 
        ## couleur intérieur
        my $sql = "SELECT couleur_ext FROM garaga_couleur_ext WHERE alliage_id = ? ORDER BY couleur_ext";
        my $sth = $dbh -> prepare($sql);
        $sth -> execute($alliage_id);
        my @list;
        while (my $tmp = $sth->fetchrow_hashref()) {
                push(@list, $Server->URLEncode("$tmp->{couleur_ext}"));
        }
        $sth -> finish();
        my $message;
        for (@list) {
                $message .= "$_~~";
        }
        warn "ici3";
        print $message;
}

Bref, je réussi a remplir mes 3 select si je met dans les 2 premier appel (modele et couleur_int) un alert apres le http.send(null)

Si j'enleve ces 2 alert, seulement le dernier select (couleur_ext) est rempli.

J'aimerai savoir si qqn a une autre solution. Je ne veux surtout pas être obliger de faire 2 alert (vraiment inutile pour l'utilisateur) pour pouvoir faire fonctionner ce code adéquatement.

Merci