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

AJAX Discussion :

Affichage d'une requête et mis a jour au click du formulaire


Sujet :

AJAX

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Autre
    Inscrit en
    Mars 2021
    Messages
    206
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Mayenne (Pays de la Loire)

    Informations professionnelles :
    Activité : Autre

    Informations forums :
    Inscription : Mars 2021
    Messages : 206
    Par défaut Affichage d'une requête et mis a jour au click du formulaire
    Bonjour,
    je ne suis pas de tout expert en Ajax, j'ai une base de donnée avec une table catégorie. Pour administrer j'ai crée un formulaire(dans une page administrateur.php) pour créer une nouvelle catégorie. Je voudrais à coté du formulaire dans un div faire apparaitre toutes mes catégories et chaque fois que je soumet le formulaire pour en créer une, la liste dans le div se mets à jour avec une requête AJAX.
    Mes problèmes avec mon code :
    Quand je soumet le formulaire je vois juste un court instant ma liste vu que ma page se recharge, j'ai besoin de soumettre le formulaire pour créer une nouvelle catégorie.
    Est ce que il y a possibilité avec une requete AJAX d'avoir la liste deja afficher avant de soumettre le formulaire puis quand à la soumission du formulaire la liste s'affiche à jour ?
    voici mon code :
    ma page de formulaire dans createCategories.php :
    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
    <div class= "col-md-5 border border-grey p-3 m-3 ">
            <form  action="administration.php" enctype="multipart/form-data" method="post">
            <h5>Créer une catégorie</h5>
                <div class="form-group mb-1">
                    <label for="nom">nom *</label>
                    <input type="nom" class="form-control" name="nom" required>  
                </div>
                <div class="form-group mb-3">
                    <label for="affiche">photo *</label>
                    <input type="file" class="form-control-file d-block bg-white p-3" name="file" value="" required>
                </div>
                <input type="submit" name="submitCreateCategorie" class="mb-3" value="envoyer" onclick="loadDoc()">
            </form>
        </div>

    dans ma page administration.php j'appelle la page du formulaire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <?php require 'formCreateCategories.php '?>
    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
    <script type="text/JavaScript">
    //-------récupérer l’objet XMLHttpRequest----------------
    function loadDoc() {
      var xhttp = new XMLHttpRequest();
      xhttp.onreadystatechange = function() {
        if (this.readyState == 4 && this.status == 200) {
         document.getElementById("categories").innerHTML = this.responseText;
        }
      };
      xhttp.open("GET", "categories.ajax.php", true);
      xhttp.send();
    }
     </script>
    puis la requete sur une page categories.ajax.php :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    <?php require_once '../controller/controllerCategories.php'?>
    <?php  
    $categoriesController = new ControllerCategories();
    $categories = $categoriesController->getCategories();
    ?>
    <ul>
          <?php foreach($categories as $cat) :?>
                <li><?=$cat["nom"]?></li> 
          <?php endforeach ?> 
    </ul>
    Mon code marche c'est juste la mise en place qui me pose problème.
    Merci

  2. #2
    Membre confirmé
    Homme Profil pro
    Autre
    Inscrit en
    Mars 2021
    Messages
    206
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Mayenne (Pays de la Loire)

    Informations professionnelles :
    Activité : Autre

    Informations forums :
    Inscription : Mars 2021
    Messages : 206
    Par défaut
    Bonjour,
    Après recherche j'ai résolu mon problème :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    let file = "../ajax/categories.ajax.php";
    fetch (file)
    .then(x => x.text())
    .then(y => document.getElementById("categories").innerHTML = y);
    Bonne journée

  3. #3
    Modérateur

    Avatar de NoSmoking
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    17 212
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 17 212
    Par défaut
    Bonjour,
    Quand je soumet le formulaire je vois juste un court instant ma liste vu que ma page se recharge
    le comportement est normal si tu n'inhibe pas l'action par défaut via un event.preventDefault.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    function loadDoc(e) {
      e.preventDefault();
      // ... la suite 
    }
    mais mieux avec un appel du type :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    const f = document.querySelector("form");
    f.onsubmit = (e) => {
      e.preventDefault();
    // ... les actions à faire
    }

    Après recherche j'ai résolu mon problème :
    L'API fetch remplace avantageusement XMLHttpRequest mais je doute que cela soit ce qui à résolu ton problème.

  4. #4
    Membre confirmé
    Homme Profil pro
    Autre
    Inscrit en
    Mars 2021
    Messages
    206
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Mayenne (Pays de la Loire)

    Informations professionnelles :
    Activité : Autre

    Informations forums :
    Inscription : Mars 2021
    Messages : 206
    Par défaut
    Bonjour,
    J'ai supprimé l'action sur l'input du formulaire et maintenant malgré la page se charge à la soumission du formulaire j'ai quand même en réel la liste qui reste affichée et qui se mets à jour sans devoir actualiser la page deux fois. Par contre je n'ai pas trop compris ou mettre votre code désolé.
    Est ce que je dois entourer mon code ? :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    const f = document.querySelector("form");
    f.onsubmit = (e) => {
      e.preventDefault();
    fetch (file)
    .then(x => x.text())
    .then(y => document.getElementById("categories").innerHTML = y);
    }
    Cela permettrais de ne pas charger la page et envoyer quand meme les données à ma base ?
    merci pour votre patience.

  5. #5
    Modérateur

    Avatar de NoSmoking
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    17 212
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 17 212
    Par défaut
    Il te faut respecter l'ordre d'apparition des éléments dans la page HTML, pour pouvoir utiliser un élément via JavaScript il faut que celui-ci soit déjà présent dans la page.
    Le schéma est donc
    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
    <form action="administration.php" enctype="multipart/form-data" method="post">
      <!-- les éléments de ton formulaire -->
    </form>
     
    <script>
    // le script applicable à ton formulaire
    const f = document.querySelector("form");
    f.onsubmit = (e) => {
      //inhibe action par défaut
      e.preventDefault();
      // récup. URL de la requête
      const reqURL = f.getAttribute("action");
      // c'est parti
      fetch(reqURL)
        .then(x => x.text())
        .then(y => document.getElementById("categories").innerHTML = y);
    }
    </script>
    voilà en gros ce que tu devrais avoir !

  6. #6
    Membre confirmé
    Homme Profil pro
    Autre
    Inscrit en
    Mars 2021
    Messages
    206
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Mayenne (Pays de la Loire)

    Informations professionnelles :
    Activité : Autre

    Informations forums :
    Inscription : Mars 2021
    Messages : 206
    Par défaut
    Bonjour,
    merci beaucoup pour votre aide et vos conseils.
    bonne journée

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

Discussions similaires

  1. Somme sur une requête de mis à jour
    Par iseulysse dans le forum Requêtes et SQL.
    Réponses: 0
    Dernier message: 04/02/2015, 22h37
  2. Affichage d'une requête
    Par Sorcier157 dans le forum Zend_Db
    Réponses: 6
    Dernier message: 27/10/2006, 10h30
  3. [MySQL] affichage d'une requête
    Par gailup dans le forum PHP & Base de données
    Réponses: 8
    Dernier message: 01/06/2006, 10h20
  4. [MySQL] Affichage d'une requête
    Par leloup84 dans le forum PHP & Base de données
    Réponses: 9
    Dernier message: 31/01/2006, 10h54
  5. Modifier l'affichage d'une requête
    Par seal dans le forum Langage SQL
    Réponses: 3
    Dernier message: 21/09/2005, 14h26

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