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 :

Traitement PHP et récupération variable PHP dans JavaScript avec AJAX pour l'afficher dans HTML [AJAX]


Sujet :

jQuery

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2017
    Messages
    176
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Septembre 2017
    Messages : 176
    Par défaut Traitement PHP et récupération variable PHP dans JavaScript avec AJAX pour l'afficher dans HTML
    Bonjour,
    j'ai un problème qui mélange JS avec ajax, PHP et HTML.
    J'ai une page HTML avec un formulaire, un simple champ où je rentre un mot. je traite ce formulaire en PHP, il s'affiche dans une autre page.
    Ce que je voudrai faire, c'est via ajax et l'objet XMLHttpRequest, donc sans recharger ma page html. récupérer le mot rentré dans le formulaire et l'afficher sur ma page html.

    mon code index.html:
    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
    <!DOCTYPE html>
    <html lang="fr">
    <head>
        <meta charset="UTF-8">
        <title>Test PHP</title>
        <script>src="script.js"</script>
        <script src="jquery-3.4.1.min.js"></script> 
    </head>
    <body>
        <form method="post" action="traitementAjax.php">
            <p>Entrer un mot:<input type="text" name="mot" id="mot" autofocus/><button type="submit" id="submit">Submit</p>
            <p id="responseAjax"></p>
        </form>
     
    </body>
    </html>

    Mon code traitementAjax.php
    Code PHP : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <?php 
    $mot=strtoupper($_POST["mot"]);
    echo $mot;
    ?>

    Mon code script.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
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    "use strict";
     
    //méthode avec fetch qui fournit une meilleur alternative à XMLHttpRequest
        /*fetch('traitementAjax.php', {method: 'POST'})
        .then(response => {
            if (response.ok) {
                console.log(response.text());
                document.getElementById('responseAjax').innerHTML = response.text();
            }
        })*/
     
        //fetch avec jquery, pour éviter les problèmes de cross-origin
        /*fetch('https://code.jquery.com/jquery-migrate-3.1.0.min.js')
        .then(response => {
            if (response.status === 200) {
                return response.text()
            }
        })
        .then(text => {
            document.getElementById('responseAjax').innerHTML = response.text();
        })*/
     
     
    //méthode avec ajax et objet XMLHttpRequest(
    var xhr = new XMLHttpRequest();
     
    xhr.onreadystatechange = function() {
        if (xhr.readyState === 4 && this.status === 200) {   
            document.getElementById('responseAjax').innerHTML =  xhr.responseXML;
        }
    }
     
    xhr.open('POST', 'traitementAjax.php', true);
    xhr.send();
     
     
    //autre méthode youtube
    /*$(document).ready(function() {
        $("#submit").click(function() {
            var mot = $("#mot").val();
            var datastring = 'mot=' + mot;
            if (name === '') {
                $("#display").html('please Fill The Field');
            }
            else {
                $.ajax({
                    type: "POST",
                    url: "traitementAjax.php",
                    data: datastring,
                    cache: false,
                    success: function(result){
                        $("#responseAjax").html(result);
                    }
                })
            }
            return false;
        })
    })*/
    Vous pouvez remarquer dans mon JS, que j'ai essayé plusieurs solutions, qui me donne le même résultat, affichage de mon mot traité par PHP (en MAJUSCULE) mais dans une nouvelle page. Moi ce que je veux, c'est l'afficher dans ma page html en dessous de mon champ de saisie, sans recharger la page (d'où ajax).

    Donc pour moi, le problème viendrait de cette ligne dans mon js:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    document.getElementById('responseAjax').innerHTML =  xhr.responseXML;
    Mais là, je suis à court d'idées...

    D'avance, merci de votre aide.

  2. #2
    Expert confirmé Avatar de Toufik83
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2012
    Messages
    2 507
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2012
    Messages : 2 507
    Par défaut
    Salut,

    1-Commence d'abord par charger jQuery avant ton script js :
    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    <script src="jquery-3.4.1.min.js"></script><!-- jQuery d'abord --> 
    <script src="script.js"></script>

    2-Ferme la balise <button> dans
    Code HTML : Sélectionner tout - Visualiser dans une fenêtre à part
    <button type="submit" id="submit">Submi

    3-Utiliser la fonction $.ajax de jQuery :
    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
    $(document).ready(function() {
        $("form").submit(function(e) {
            e.preventDefault();//c'est l'équivalente de return false
            var mot = $("#mot").val();
            if (mot.trim()== "") {
                $("#display").html('please Fill The Field');
            }
            else {
                $.ajax({
                    method: "POST",//method au lieu de type
                    url: "traitementAjax.php",
                    data: {"mot":mot},//tu peux envoyer les données en tant qu'objet javascript {}
                    cache: false
                })
                .done(function(result){//utiliser done au lieu de success
                       $("#responseAjax").html(result);
                })
                .fail(function(err){//utiliser fail pour voir si y'a des erreurs...
                       alert('Erreur ajax :'+err);
                })
            }
        });
    });

  3. #3
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2017
    Messages
    176
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Septembre 2017
    Messages : 176
    Par défaut
    Merci pour les corrections et explications.

    Le résultats est le même, un nouvelle page s'ouvre avec mon mot en majuscule, et je ne vois plus ma page HTML.

  4. #4
    Membre Expert Avatar de darkstar123456
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2008
    Messages
    1 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2008
    Messages : 1 895
    Par défaut
    Bonjour,

    Ne pas utiliser l'événement click pour un formulaire.
    En effet, cela permet juste de binder le bouton mais pas la soumission du formulaire.
    De plus e.preventDefault() ne fonctionne pas pour les formulaires. Seul return false fonctionne.

    Code javascript : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    $('body').on('submit', 'form', function(e) { // Pas d'ID ou de class sur le form, du coup je sélectionne tous les tags <form>
    	e.preventDefault(); // Je le mets toujours mais ça sert à rien ici
    	var $this = $(this);
    	$.ajax({
    		method: 'POST',
    		url: $this.attr('action'),
    		success: function(response) {
    			console.log('response');
    		}
    	});
    	return false;
    });

  5. #5
    Expert confirmé Avatar de Toufik83
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2012
    Messages
    2 507
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2012
    Messages : 2 507
    Par défaut
    e.preventDefault() fonctionne aussi avec les formulaires si on utilise .submit et pas .click :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    $('form').submit(function(e){
        e.preventDefault();
        .....
    });

  6. #6
    Invité
    Invité(e)
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
        <script>src="script.js"</script>
    Quelqu'un a besoin de lunettes ici...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
        <script src="script.js"></script>

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

Discussions similaires

  1. [MySQL] problème récupération variable contenu dans un tableau
    Par mac-addict dans le forum PHP & Base de données
    Réponses: 19
    Dernier message: 22/08/2011, 16h12
  2. Inserer un fichier PHP dans Html
    Par Georges974 dans le forum Langage
    Réponses: 8
    Dernier message: 19/07/2011, 11h29
  3. [MySQL] PHP dans HTML ? quelle technique utiliser ?
    Par Delvauxo dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 22/03/2011, 19h22
  4. Réponses: 2
    Dernier message: 30/11/2007, 13h14
  5. HTML dans PHP, PHP dans HTML...
    Par jeremy_chauvel dans le forum Langage
    Réponses: 3
    Dernier message: 24/04/2006, 20h28

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