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 :

Réception données AJAX


Sujet :

AJAX

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Mars 2016
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Mars 2016
    Messages : 6
    Points : 1
    Points
    1
    Par défaut Réception données AJAX
    Bonsoir à tous,

    Je me permets de poster un petit topic ici afin d'avoir quelques renseignements sur un problème que je rencontre avec de l'AJAX / PHP.

    Avant d'exposer mon soucis, j'ai fais pas mal de recherche sur le problème, mais je n'arrive pas à avoir réponse.

    La fonctionnalité final étant d'avoir un champ text, et lorsque je note quelque chose (recherche un nom par ex.) le champ ce met à jour avec une liste déroulante en dessous en fonction de ce qui est noté. (Avec une recherche dans une BDD).

    Je bloque sur le fait de récupérer ce que je note afin de le traiter avec le code php.

    Voici mon code :

    search.php :
    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
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
     
    <?php
        session_start();
      
            include_once 'class/ManagerUsers.php';
     
            $userManager = new ManagerUsers();
       
       include 'isLogin.php';
     
            if (empty($_SESSION['current_user_id']))
            header("Location: index.php");
            
            $titleHtml = "Rechercher un client";
            include 'header.php';
     
            if(isset($_POST['test']) && !empty($_POST['test'])) {
                    echo "<h1>toto</h1>";
    //              $userName = $userManager->findUserByName();
    //              $userLastname = $userManager->findUserByLastname();
    //              $userEmail = $userManager->findUserByEmail();
            }
     
    ?>
    Par son nom :<br />
    <input id="searchName" type="search"></input>
    <select style="display:none" multiple class="form-control">
    <?php
    // <option> dynamique avec les éléments récupérés
    ?>
    </select>
    <br />
    Par son Prénom :<br />
    <input id="searchLastname" type="search"></input>
    <select style="display:none" multiple class="form-control">
    <?php
    // <option> dynamique avec les éléments récupérés
    ?>
    </select>
    <br />
    Par son email :<br />
    <input id="email" type="search"></input>
    <select style="display:none" multiple class="form-control">
    <?php
    // <option> dynamique avec les éléments récupérés
    ?>
    </select>
     
     
    <script>
    $(document).ready(function(){
    	$("#searchName").keyup(function(){
    		var myname = $('#searchName').val();
    	    $.ajax({
    	       type : 'POST',
    	       url : 'search.php',
    	       data : 'test=' + myname,
    	       dataType : 'html',
    	       success : function(code_html, statut){
    	           alert(code_html);
    	           // alert(myname);
    	       },
    	       error : function(resultat, statut, erreur){
    	           alert('nop');
    	       }
    	    });
    	});
    });
    </script>
     
    <?php include 'footer.php'; ?>
    La question étant, pourquoi dans le $_POST['test'] je ne récupère aucunes données ?

    Ou est mon erreur ?

    Cdlt

  2. #2
    Expert éminent sénior
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 235
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 235
    Points : 15 532
    Points
    15 532
    Par défaut
    après le "var myname = ..." rajoutez console.log(myname); pour vérifier que vous envoyez bien la donnée

  3. #3
    Nouveau Candidat au Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Mars 2016
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Mars 2016
    Messages : 6
    Points : 1
    Points
    1
    Par défaut
    Merci pour votre réponse

    Après avoir placé console.log(myname); je vois correctement ce que j'inscris dans mon champ input dans la console.

    J'avais également testé, dans la fonction success, de mettre un alert(myname), la pop-up me renvois correctement ce que j'inscris aussi.

  4. #4
    Expert éminent sénior
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 235
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 235
    Points : 15 532
    Points
    15 532
    Par défaut
    je viens d'essayer votre code JavaScript et je retrouve bien la données dans $_POST
    donc le problème est peut-être dans le code PHP, essayez ça avant "session_start" : echo json_encode($_POST);exit();

  5. #5
    Nouveau Candidat au Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Mars 2016
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Mars 2016
    Messages : 6
    Points : 1
    Points
    1
    Par défaut
    J'ai essayé echo json_encode($_POST);exit(); mais avec le exit(); je n'ai pas l'input nécessaire à envoyer le POST. J'ai donc essayé sans exit(); et en rajoutant à tous les blocks php :

    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
     
        echo json_encode($_POST);
        echo json_encode($_GET);
     
        session_start();
     
        echo json_encode($_POST);
        echo json_encode($_GET);
     
        include_once 'class/ManagerUsers.php';
     
        echo json_encode($_POST);
        echo json_encode($_GET);
     
        $userManager = new ManagerUsers();
     
        echo json_encode($_POST);
        echo json_encode($_GET);
     
       include 'isLogin.php';
     
       echo json_encode($_POST);
       echo json_encode($_GET);
     
       if (empty($_SESSION['current_user_id']))
       header("Location: index.php");
    J'ai également essayé avec la méthode $_GET et rien non plus.

    De plus, j'ai essayé de faire référence à une autre page php :

    ajax.php
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    <?php
    echo json_encode($_POST);exit();
    ?>
    Le résultat est toujours le même : "[]"

    Une idée, sur quel environnement testez-vous ?

    Je suis sur WAMP, est-ce qu'il y aurait un module à activer en particulier ?


    EDIT : j'ai essayé de mettre à la main ?test=something dans l'URL et je reçois bien la donéne dans ce cas sous le type d'une hash :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    {"test":"something"}

  6. #6
    Expert éminent sénior
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 235
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 235
    Points : 15 532
    Points
    15 532
    Par défaut
    J'ai tester avec PHP 5.6 et Apache sur Windows.
    Du côté navigateur, j'ai testé Firefox, un cousin de Chrome et IE et ça fonctionne dans les 3 cas.

    Et pour le texte dans le champ "searchName" vous avez essayé un texte simple comme "abc" sans accents ou autres caractères spéciaux ?

  7. #7
    Nouveau Candidat au Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Mars 2016
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Mars 2016
    Messages : 6
    Points : 1
    Points
    1
    Par défaut
    Je suis sur la même version de php également.

    J'ai également le même problème sur IE / Firefox et Chrome.

    J'ai déclaré ça dans mon header.php :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    <script src="http://code.jquery.com/jquery-2.2.1.min.js" integrity="sha256-gvQgAFzTH6trSrAWoH1iPo9Xc96QxSZ3feW6kem+O00="   crossorigin="anonymous"></script>
    <script type="text/javascript" src="style/bootstrap/js/bootstrap.min.js"></script>
    Le 1er est récupéré de http://code.jquery.com/ directement.
    Le 2ème étant fourni avec bootstrap.

    EDIT : Pour le moment je ne fais qu'essayer avec des lettres comme "a" "b"

  8. #8
    Expert éminent sénior
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 235
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 235
    Points : 15 532
    Points
    15 532
    Par défaut
    Une autre chose à regarder : dans la console de développement, regarder l'onglet "post" de la requête AJAX

  9. #9
    Nouveau Candidat au Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Mars 2016
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Mars 2016
    Messages : 6
    Points : 1
    Points
    1
    Par défaut
    dans la console j'ai à chaque lettres dans l'input :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    General
      Request URL:http://localhost/projet/search.php
      Request Method:POST
      Status Code:200 OK
      Remote Address:[::1]:80
     
    Form Data
      test:ab
    EDIT : quand je place :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    	if(isset($_POST['test']) && !empty($_POST['test'])) {
    		echo "<h1>toto</h1>";
    //		$userName = $userManager->findUserByName();
    //		$userLastname = $userManager->findUserByLastname();
    //		$userEmail = $userManager->findUserByEmail();
    	}else {
    		echo "<h1>NOP</h1>";
    	}
    ?>
    Je reste dans l'état else, jamais il ne passe dans le if.

    EDIT2 : Dans la console, dans l'onglet "Response" je peux voir mon code html et j'ai bien le h1 toto qui est dedans !! Mais non affiché sur la page....

  10. #10
    Expert éminent sénior
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 235
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 235
    Points : 15 532
    Points
    15 532
    Par défaut
    Citation Envoyé par Reyfild Voir le message
    EDIT2 : Dans la console, dans l'onglet "Response" je peux voir mon code html et j'ai bien le h1 toto qui est dedans !! Mais non affiché sur la page....
    ah bin voilà, on avance
    il reste juste à trouver le problème dans "success", à la place du "alert(code_html)" essayez d'afficher la réponse dans la console avec "console.log"

  11. #11
    Nouveau Candidat au Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Mars 2016
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Mars 2016
    Messages : 6
    Points : 1
    Points
    1
    Par défaut
    Je pense avoir compris , il faut afficher le résultat de l'AJAX. J'ai pus voir sur internet des append / prepend.

    en ajoutant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <select id="selectName" multiple class="form-control">
    Et dans l'AJAX :

    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
     
    	$("#searchName").keyup(function(){
    		var myname = $('#searchName').val();
    	    $.ajax({
    	       type : 'POST',
    	       url : 'search.php',
    	       data : 'test=' + myname,
    	       dataType : 'html',
    	       success : function(code_html, statut){
    	       	   $('#selectName').append('<option>TEST</option>');
    	       },
    	       error : function(resultat, statut, erreur){
    	           alert('nop');
    	       }
    	    });
    	});
    Et tout s'affiche bien

    Merci !

    J'ai un autre soucis maintenant , c'est que le contenu des options, sont des données générées en php.

    Comment puis-je faire ?

    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
     
    	$("#searchName").keyup(function(){
    		var myname = $('#searchName').val();
    	    $.ajax({
    	       type : 'POST',
    	       url : 'search.php',
    	       data : 'name=' + myname,
    	       dataType : 'html',
    	       success : function(code_html, statut){
    	       	   $('#selectName').append('<option><?php if(isset($userName)) {echo $userName->getFirstname();} ?></option>');
    	       },
    	       error : function(resultat, statut, erreur){
    	           alert('une erreur est survenue !');
    	       }
    	    });
    	});
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    	if (isset($_POST['name']) && !empty($_POST['name'])) {
    		$userName = $userManager->findUserByName($_POST['name']);
           }
    J'ai userName qui n'est déclaré que quand la fonction ajax est appelée...

    EDIT : Je pense que l'asynchrone est la ? (ou pas !)

Discussions similaires

  1. Interprétation de données AJAX en réception
    Par Syarko dans le forum AJAX
    Réponses: 0
    Dernier message: 16/10/2015, 19h50
  2. Réception de données AJAX JSON
    Par yohann3396 dans le forum AJAX
    Réponses: 4
    Dernier message: 10/10/2015, 18h36
  3. Graphique avec Flot et réception de donnée ajax
    Par Desours dans le forum Général JavaScript
    Réponses: 0
    Dernier message: 30/08/2012, 11h57
  4. [AJAX] base de donnée Ajax
    Par kawther dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 27/02/2007, 16h52
  5. Récupération de données AJAX
    Par mxh77 dans le forum 4D
    Réponses: 1
    Dernier message: 03/02/2007, 07h02

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