IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

jQuery Discussion :

Résultat apparaît dans la console mais pas sur la page [AJAX]


Sujet :

jQuery

  1. #1
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2015
    Messages
    228
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juin 2015
    Messages : 228
    Par défaut Résultat apparaît dans la console mais pas sur la page
    Bonjour à tous,

    J'essaie d'apprendre l'Ajax ... donc, je rame un peu.

    Je suis occupé à faire une page Web contenant une liste de marque et quand j'en choisi une (clique sur un bouton 'edit'), j'aimerais faire un appel Ajax pour charger et afficher les détails de cette marque.

    Voici le code de la page principale:

    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
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    <!DOCTYPE html>
    <html lang="en">
        <head>
    		<title>Exemple</title>
    		<meta content="text/html;charset=utf-8" http-equiv="Content-Type">
    		<meta content="utf-8"                   http-equiv="encoding">
     
            <!-- Librairie JS -->
    		<script src="resources/js/jquery-3.4.1.js"                  type="text/javascript" ></script> 
                    <script src="resources/js/jquery-ui-1.12.1/jquery-ui.js"    type="text/javascript" ></script>
    		<script src="resources/bootstrap-5.02/js/bootstrap.min.js"  type="text/javascript" ></script>
    		<script src="resources/js/ajax.js"                          type="text/javascript" ></script>
    		<script src="resources/js/general.js"                       type="text/javascript" ></script>
    		<script src="resources/js/marque_JQuery.js"                 type="text/javascript" ></script>
     
    		<!-- Librairie CSS -->
    		<link rel="stylesheet" href="resources/js/jquery-ui-1.12.1/jquery-ui.css">
    		<link rel="stylesheet" href="resources/bootstrap-5.02/css/bootstrap.min.css" >
    		<link rel="stylesheet" href="resources/css/color.css" >
    		<link rel="stylesheet" href="resources/css/table.css" >
    	</head>
    	<body style='background-color: beige'>
     
    		<div class="container-fluid " role="main">
     
    			<!-- Le div ci-dessous est le bloc où j'aimerais afficher le résultat d'Ajax -->
    			<div id="detail-marque" ></div>
     
    			<!-- Affichage de la liste des marques -->
    			<?php include("listeMarques.php"); ?>
    		</div>
        </body>
    </html>

    Ensuite, voici le code pour Ajax (librairie : marque_JQuery.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
    jQuery(document).ready(function(){
     
    		/* Transfer data for edition */
     
    		var xhr = getXhr();
     
    		xhr.onreadystatechange = function(){
    			var reponse = "";
     
    			if(xhr.readyState == 4 && xhr.status == 200){
    				reponse = xhr.responseText;
    				jQuery("#detail-marque").insertAfter(reponse); // <=== AFFICHAGE RETOUR AJAX ===
    			}
    		}
     
    		xhr.open("POST","detailMarques.php",false);
    		xhr.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
     
    		/* Dans le cas où j'ouvre le page, aucune marque n'est sélectionnée. 
                        Donc, le champ "Form_MarqueID" n'existe pas. 
                        Je le force à 0 pour afficher une page avec les champs vide */
     
    		if (!document.getElementById('Form-MarqueID')){
    			xhr.send("MarqueID=" + 0);			
    		}
    Pour terminer, voici le code qui génère le bloc dynamiquement

    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
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    			<?php 
    			       /* dans le cas où je dois afficher la page vide (marqueID = 0), je vide les champs */
    				$marque   = "";
    				$pays     = "";
    				$annee    = "";
    				$taille   = "";
    				$guide    = "";
    				$remarque = "";
    				$multi    = "";
     
                                    /* Si je choisi une marque, l'ID est passé en paramètre */
     
    				if (isset($_POST["MarqueID"])){
     
    					include("connexion.php");
     
    					// extrait les données
     
    					$sql = "SELECT m.marque_id as id, m.marque_nom as marque, m.marque_annee as annee, m.marque_pays as pays, m.marque_taille as taille,\n"
    						 . "       m.marque_guide_taille as guide, m.marque_remarques as remarque, m.marque_multi as multi\n"
    						 . "  FROM marques as m \n"
    						 . " WHERE m.marque_id = " . $_POST["MarqueID"] . ";";
     
    					$result = $mysqli->query($sql);
     
    					if (!$result) {
    						trigger_error('Invalid query: ' . $mysqli->error);
    					}
     
    					$qt     = $result->num_rows;
    					$mysqli->close();
     
    					if($result){
    						if ($result->num_rows > 0) {
     
    							// Affichage des données
     
    							while($row = $result->fetch_assoc()) {
    								$marque   = utf8_encode($row['marque']);
    								$pays     = utf8_encode($row['pays']);
    								$annee    = $row['annee'];
    								$taille   = utf8_encode($row['taille']);
    								$guide    = utf8_encode($row['guide']);
    								$remarque = utf8_encode($row['remarque']);
    								$multi    = utf8_encode($row['multi']);								
    							}
     
    Le code qui suit est tout le HTML ( Bootstrap) pour afficher

    Voilà. Quand le code s'exécute, je n'ai aucune erreur. Mais rien est affiché.
    Par contre, si j'ouvre la console, je vois le résultat correctement formaté !
    Cela fait plusieurs jours que je m'arrache les cheveux. Mais je ne trouve pas mon erreur.

    Y aurais-t'il un parmi vous qui vois une erreur ?
    Je ne sais plus où chercher !

    Merci de votre aide
    Andre

  2. #2
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2015
    Messages
    228
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juin 2015
    Messages : 228
    Par défaut La solution est trouvée
    Bonjour à tous,

    J'ai trouvé la solution:

    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
    		/* Transfert des informations pour l'édition */
     
    		var xhr = getXhr();
    		var url = "detailMarques.php";
     
    		xhr.onreadystatechange = function(){
    			var reponse = "";
     
    			if(xhr.readyState == 4 && xhr.status == 200){
    				reponse = xhr.responseText;
     
                                    // Voici l'instruction originale:
                                    //jQuery("#detail-marque").insertAfter(reponse);
     
                                    // voici la bonne réponse
    				document.getElementById('detail-marque').innerHTML = reponse;
                                    // Cela à fonctionné du premier coup
     
    			}
    		}
     
    		// https://macollection/marque/editionmarques.php
     
    		xhr.open("POST",url,false);
    		xhr.setRequestHeader('Content-Type','application/x-www-form-urlencoded');		
     
    		if (!document.getElementById('Form-MarqueID')){
    			xhr.send("MarqueID=" + 0);			
    		}
    C'est l'instruction JQuery qu'il n'aime pas.
    Est arrivé un second problème ... Les boutons ne voulaient plus fonctionné
    Les évenements ont disparus


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    // Au départ, j'ai écris cette phrase
    jQuery("#detail-marque").click(function(){
     
    // Après l'exécution de l'Ajax, j'avais beau cliquer sur le bouton ... plus rien
    // J'ai du changer la ligne de code par:
     
    jQuery("#detail-marque").on( "click", "#bt_clear", function() {
     
    // Et comme cela, tout fonctionne bien !
    Voilà,
    Je partage avec vous mes trouvailles car, je pense de ne pas être seul dans cette situation !
    Bonne journée

    André

  3. #3
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 659
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 659
    Billets dans le blog
    1
    Par défaut
    document.getElementById('detail-marque').innerHTML = reponse;
    Normal tu as écrasé les éléments du DOM auxquels tu avais attribué les évènements ...

    Deux solutions:
    Soit tu affectes tes évènement par délégation à parti du parent (voir on avec trois paramètres ou delegate)
    Soit tu réaffectes tes événements après avoie écrasé ton innerHMLT
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

  4. #4
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2015
    Messages
    228
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juin 2015
    Messages : 228
    Par défaut Réponse au modérateur
    Bonjour,

    Merci de vos conseils.

    Pour information, la discussion est clôturée ...


    Bonne journée
    André

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 6
    Dernier message: 11/12/2019, 13h28
  2. Afficher les résultat d'un 'Process' dans la console
    Par Krishna dans le forum Général Python
    Réponses: 5
    Dernier message: 12/10/2013, 13h39
  3. Réponses: 11
    Dernier message: 29/04/2013, 16h07
  4. Réponses: 3
    Dernier message: 18/11/2011, 19h23
  5. [AJAX] Avoir des infos sur une page web
    Par Skieur38 dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 07/03/2007, 21h38

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo