Bonjour,

J'aimerais lorsque je clique sur une liste déroulante pouvoir charger dynamiquement une requête SQL dans une balise <div>. Pour cela, je combine le Ajax et le jquery.

Pour une raison que j'ignore, mon code en jquery ne fonctionne qu'une fois sur deux. Je n'arrive pas à comprendre comment je pourrais régler le problème. Pourriez-vous, s'il vous plaît m'aiguiller vers des méthodes à suivre pour comprendre d'où vient le problème ?

Je vous laisse voir mon code :

Body :
Code HTML : 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
<body>
  <div id="content">
    <h1>Infos sur les sous-domaines</h1>
 
    <div style="float:left;">
      <p>Numéro de page</p>
      <select name="nbPage" id="nbPage" >
        <!-- The options are set by the script -->
      </select>
    </div>
    <div id="infomembre" onload="listeSubDomainName()" style="display:grid;">
    </div>
 
  </div>
</body>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>
<script src="Javascript/membres.js"></script>
<script type="text/javascript" src="Javascript/click.js"></script>
</head>


Membre.js
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
(function listeSubDomainName(){
   var infoMembre = document.getElementById("infomembre") ;
   var xhr = new XMLHttpRequest() ;
 
   var xh = new XMLHttpRequest();
   var select = document.getElementById("nbPage");
 
   // Premiere requete Ajax
   xh.open("GET","mysql.php?count",true); // compte le nombre de ligne dans la base de données
 
   xh.addEventListener("readystatechange", function() {
      if(xh.readyState === 4 && xh.status === 200) {
	 for ($i=1; $i <= Math.floor(xh.responseText /25) + 1 ; $i++ ) {
	    var option = select.appendChild(document.createElement('option'));
	    option.innerHTML = $i ;
            option.value = $i ;
            option.classList.add("option") ;
	 }
 
      }
   }) ;
 
   xh.send(null);
 
   // Deuxième requete Ajax
   xhr.open("GET","mysql.php?limit=1",true); // limit=1 signifie qu'on va prendre les 0*25 à 1*25 ième lignes de la base de données
 
   xhr.addEventListener("readystatechange", function() {
      if(xhr.readyState === 4 && xhr.status === 200) {
         infoMembre.innerHTML = xhr.responseText ;
      }
   });
 
   xhr.send(null);
}
 
 
 
)();
click.js
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
$(document).ready(function(){
   $(".option").ready(function(){
      $(".option").on('click',function(){
         listMembre($(this).val()); // M'affiche à chaque fois 1. Je me concentre néanmoins pour l'instant à faire en sorte que ce code fonctionne tout le temps
         alert($(this).val()); // Me permet de vérifier si l'évènement est bien déclenché
      });
   });
});
 
function listMembre(p) {
 
   var infoMembre = document.getElementById("infomembre") ;
   var xhr = new XMLHttpRequest() ;
 
   xhr.open("GET","mysql.php?limit=" + encodeURIComponent(p),true); // limit=p signifie qu'on va prendre les (p-1)*25 à p*25 ième lignes de la table 
                                                                                             // dans la base de données
 
   xhr.addEventListener("readystatechange", function() {
      if(xhr.readyState === 4 && xhr.status === 200) {
         infoMembre.innerHTML = xhr.responseText ;
      }
   });
 
   xhr.send(null);
 
}
Je tiens à préciser que j'ai utilisé "onload" dans la balise <div id="infoMembre" ></div> car lorsque je rajoutais un addEventListener en fin de chargement cela ne fonctionnait pas même si je faisais par exemple :


Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
var infoMembre = document.getElementById("infomembre") ;
infoMembre.addEventListener('load', function({
     // Le code 
}));

Cordialement,

LhommeLibre