Mon code ne s'execute pas

<script>
	var element = document.getElementById("numero");
	var buttonafficher = document.getElementById("submit");
	var numero = element.value;
	
	buttonafficher.addEventListener('click',function(){
			//alert(numero);
			if(numero == ""){
				alert("veuillez remplir ce champ");
				event.preventDefault();
				
			}
			
   if(numero == "jfet025"){
				document.getElementById("numero").value="jfet025";
				document.getElementById("text").value="20/08/21";
				document.getElementById("text1").value="jfet compagny";
				document.getElementById("montant").value="2.000.000";
				document.getElementById("etat").value="livrer";
				event.preventDefault();
				return;
			}

	//--------lire les infos via le fichier consulterfact.php et affiche
	
	var xhr= new XMLHttpRequest();
			
	var numfactsaisie = document.getElementById("numero").value;

	xhr.open("GET","/prospectvente/facture/consulterfact.php?numero="+numfactsaisie, true);
			 xhr.responseType="json";
			 xhr.send();
			 xhr.onreadystatechange=function(){
			
	if(xhr.readystate == 4 && xhr.status == 200){
	var res =json.parse(xhr.response);
			   console.log(this.response);
			 alert(res.dvteNum);
			document.getElementById("numero").value=res.dvteNum;
			document.getElementById("text").value=res.dvteDtEnreg;
			document.getElementById("text1").value=res.dvteNomClient;
			document.getElementById("montant").value=res.dvtemtTTC;
				
			}else{
				//alert(xhr.status);
			}
		}
		event.preventDefault();

});

</script>

bonjour voici mon code javaScript les données saisies en dur s'affiche sur le navigateur mais lorsque je saisie une valeur dans le champ requis la suiyte du code ne s'exécute pas pour lire les informations de consulterfact.php svp j'ai besoin d'aide merci

10 réponses

Résumé de la discussion

Problème principal : le code JavaScript affiche des données en dur lorsque jfet025 est saisi, mais ne lit pas les informations via consulterfact.php pour les autres valeurs du champ numéro. Des réponses identifient une erreur de syntaxe : xhr.readystate n’existe pas, celui-ci étant xhr.readyState avec S majuscule, et recommandent cette correction pour que la suite s’exécute. D’autres échanges portent sur la vérification de l’état readyState et status, la console JavaScript et les éventuelles erreurs, avec des exemples et des tests alternatifs. En cas de test, la requête XHR GET vers consulterfact.php?numero=... apparaît dans la console et reçoit 200 OK, signalant une réponse serveur, mais laissant potentiellement le flux d’exécution inachevé.

Bobot (l’IA à votre service)
  1. Bonjour,

    Commence par regarder dans la console javascript de ton navigateur, tu dois avoir des erreurs à corriger.

    Il manque notamment le paramètre event dans la fonction passée via addEventListener pour appeler preventDefault(). Généralement on utilise preventDefault() dès le début de la fonction pour annuler le comportement de base du bouton, ainsi pas besoin de rappeler cette instruction plusieurs fois :

    buttonafficher.addEventListener('click', function(event) {
        event.preventDefault(); // on annule la gestion de base de l'event, pas besoin de réutiliser cette instruction dans la fonction
        // ... suite du code ...
    


    A voir dans la console js si il y a d'autres erreurs à corriger.
    0
    1. bonjour
      ma console n'a pas d'erreur mais je ne comprend pas ce qui se passe
      0
      1. Dans ce cas le problème peut venir de la requête ajax. Est-ce que tu as une erreur (500, 404, ...) dans l'onglet Réseau dans les outils de développement du navigateur lorsque le requête ajax est envoyée ?

        Si tu décommente la ligne
        //alert(xhr.status);
        , est-ce que tu as un retour ?
        0
        1. non non tout passe il m'affiche 200 ok
          0
          1. D'après ton code, si la valeur de l'input "numero" est égale à "jfet025", les autres input sont alors remplis (ligne 15 à 20 de ton premier code) mais la requête ajax n'est pas envoyée puisque ton code s'arrête à l'instruction
            return;
            à la ligne 21. Est-ce bien le comportement attendu ?

            Si tu as un retour 200 c'est que la requête ajax est bien passée, tu devrais donc voir ton résultat via l'instruction
            alert(res.dvteNum);
            ?
            0
            1. oui lorsque je saisi jfet025 il renvoi les données replies en dur ça c'et la première partie
              mais je voudrai que lorsque j'entre une autre valeur dans l'input "numero" il part lire dans la base de donnée et me renvoyer le resulta mais il ne le fais pas
              0
              1. En testant un peu plus ton code, je viens de comprendre que le problème vient d'une erreur de syntaxe : la propriété
                xhr.readystate
                n'existe pas, il s'agit de
                xhr.readyState
                (avec un S majuscule).

                Ton code devrait mieux fonctionne avec cette correction.
                0
                1. je n'ai toujours aucun changement
                  0
                  1. Pas très précis comme retour. Le code de la fonction onreadystatechange est bien exécuté ? Des erreurs dans la console js ?

                    Un exemple : https://jsfiddle.net/c7z8xdhe/
                    N'ayant pas accès au fichier consulterfact.php, j'ai utilisé une autre API json en ligne pour faire un test.
                    0
                  2. @Pitetil n'arrive mème pas jusque là bas c'est mon véritable problème il n'exécute pas cette partie
                    0
                2. le navigateur exécute la première partie du code mais il ne parvient pas à exécuter a suite du code pour lire les informations via le fichier consulterfactt là
                  0
                  1. Est-ce que la condition
                    if(xhr.readyState == 4 && xhr.status == 200)
                    est vrai lorsque tu exécute le code ?
                    Est-ce que tu vois la réponse de la requête dans la console ?
                    Toujours pas d'erreurs dans la console js ?
                    0
                  2. @Pitetcette condition est vrai puisqu'il me renvoi 200 ok
                    0
                  3. @metronome237Donc si tu affiches la réponse juste après tu devrais la voir dans la console ? Est-ce le cas ?
                    if(xhr.readyState == 4 && xhr.status == 200){
                      console.log(xhr.response);
                    0
                  4. @PitetXHRGEThttp://localhost/prospectvente/facture/consulterfact.php?numero=11BL1
                    [HTTP/1.1 200 OK 32ms]

                    voilà ce qui s'affiche dans la console lorsque je saisi quelque chose dans l'inpur "numero"
                    0
                  5. @metronome237Il ne s'agit pas de la réponse, as tu bien utilisé l'instruction
                    console.log(xhr.response);
                    ?

                    Est-ce que tu peux nous montrer ton code modifié sinon ?
                    0
                3. bonjour désolé pour l'absence mais rien ne s'affiche toujours mais j'ai une erreur dans la conole voici l'erreur:
                  Uncaught ReferenceError: res is not defined
                  at XMLHttpRequest.xhr.onreadystatechange ((index):99)
                  (index):70 Numéro : 11BL1
                  (index):92 Send XHR
                  (index):95 State : 2 Status : 200
                  (index):95 State : 3 Status : 200
                  (index):95 State : 4 Status : 200
                  (index):98 null

                  Uncaught ReferenceError: res is not defined
                  at XMLHttpRequest.xhr.onreadystatechange ((index):99)
                  voilà les 2 erreurs
                  0
                  1. Bonjour,

                    Bonne nouvelle si tu as des messages d'erreurs, même si ca ne fonctionne pas encore on devrait désormais savoir pourquoi.

                    D'après le message d'erreur, à la ligne 99, tu essayes d'utiliser la variable res alors que celle-ci n'a pas été déclarée (elle n'est pas initialisée).
                    Si tu ne vois pas comment corriger l'erreur, peux-tu nous montrer la dernière version de ton code complet stp ?
                    0
                  2. @Pitet
                    	var element = document.getElementById("numero");
                    				var buttonafficher = document.getElementById("submit");
                    						alert(numero);	
                    					buttonafficher.addEventListener('click', function(event){
                    					
                    					event.preventDefault();
                        
                    				var numfactsaisie = document.getElementById("numero").value;
                      
                    					console.log('Numéro : ' + numfactsaisie);
                      
                    				if(numfactsaisie == ""){
                    					alert("veuillez remplir ce champ");
                    				return;
                    				}
                      
                    				if(numfactsaisie == "jfet025"){
                    					document.getElementById("numero").value="jfet025";
                    					document.getElementById("text").value="20/08/21";
                    					document.getElementById("text1").value="jfet compagny";
                    					document.getElementById("montant").value="2.000.000";
                    					document.getElementById("etat").value="livrer";
                    					return;
                    				}
                    
                    				//--------lire les infos via le fichier consulterfact.php et affiche
                    			var xhr= new XMLHttpRequest();
                    
                    		xhr.open("GET","/prospectvente/facture/consulterfact.php?numero="+numfactsaisie, true);
                    		xhr.responseType = "json";
                    		xhr.send();
                    			console.log('Send XHR');
                    				xhr.onreadystatechange = function(){
                    					
                    				console.log('State: '+xhr.readyState+ ' Status : '+xhr.status);
                    			if(xhr.readyState == 4 && xhr.status == 200){
                    				
                    				
                    				console.log(xhr.response);
                    				alert(res.dvteNum);
                    				document.getElementById("numero").value=res.dvteNum;
                    				document.getElementById("text").value=res.dvteDtEnreg;
                    				document.getElementById("text1").value=res.dvteNomClient;
                    				document.getElementById("montant").value=res.dvtemtTTC;
                    			}else{
                    			}
                      };
                    });
                    
                    

                    voici la dernière version
                    0
                  3. @metronome237En effet suite aux différentes version de test, la variable res n'est plus initialisée sur la dernière version.

                    Tu peux essayer avec cette correction :
                    var element = document.getElementById("numero");
                    var buttonafficher = document.getElementById("submit");
                    
                    buttonafficher.addEventListener('click', function(event){
                      event.preventDefault();
                    
                      var numfactsaisie = document.getElementById("numero").value;
                    
                      console.log('Numéro : ' + numfactsaisie);
                    
                      if(numfactsaisie == ""){
                        alert("veuillez remplir ce champ");
                        return;
                      }
                    
                      if(numfactsaisie == "jfet025"){
                        document.getElementById("numero").value="jfet025";
                        document.getElementById("text").value="20/08/21";
                        document.getElementById("text1").value="jfet compagny";
                        document.getElementById("montant").value="2.000.000";
                        document.getElementById("etat").value="livrer";
                        return;
                      }
                    
                      //--------lire les infos via le fichier consulterfact.php et affiche
                      var xhr= new XMLHttpRequest();
                    
                      xhr.open("GET","/prospectvente/facture/consulterfact.php?numero="+numfactsaisie, true);
                      xhr.responseType = "json";
                      xhr.send();
                      console.log('Send XHR');
                      xhr.onreadystatechange = function(){
                        console.log('State: ' + xhr.readyState + ' Status : ' + xhr.status);
                        
                        if(xhr.readyState == 4 && xhr.status == 200){
                          var res = xhr.response;
                          // var res = JSON.parse(xhr.response);
                          
                          console.log('Response : ');
                          console.log(res);
                          
                          document.getElementById("numero").value = res.dvteNum;
                          document.getElementById("text").value = res.dvteDtEnreg;
                          document.getElementById("text1").value = res.dvteNomClient;
                          document.getElementById("montant").value = res.dvtemtTTC;
                        }
                      };
                    });
                    


                    J'ai ajouté la ligne
                    var res = xhr.response;
                    pour récupérer le réponse de la requête ajax dans la variable res.
                    Tu peux contrôler si les données récupérées sont correctes dans la console juste après le message "Response :".
                    Si cette récupération ne fonctionne pas correctement, tu peux essayer de remplacer cette ligne par celle en commentaire juste dessous qui utilise JSON.parse() mais comme indiqué dans un précédent message, tu ne devrais en théorie pas avoir besoin d'utiliser JSON.parse() car le responseType est déjà défini en json.
                    0
                  4. @Pitet(index):74 Numéro:11BAC
                    (index):97 Send XHR
                    Voilà ce que ça me renvoi comme erreur dans la console
                    0
                  5. @metronome237A priori la requête est envoyée puisqu'on arrive à la ligne console.log('Send XHR'); mais la fonction onreadystatechange n'est pas appelée car on ne voit plus les logs "State" et "Status" comme ton précédent test.

                    Pas d'autres messages dans la console ?
                    Est-ce que tu vois la requête ajax dans l'onglet Réseau à coté de l'onglet Console ?
                    Le serveur php est bien démarré (la page consulterfact.php fonctionne) ?
                    0