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 :

Format requête Ajax qui se modifie


Sujet :

AJAX

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2018
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Août 2018
    Messages : 25
    Par défaut Format requête Ajax qui se modifie
    Bonjour ,

    Je me permets de vous contacter car je rencontre un soucis avec mes requêtes Ajax .
    J'ai une hiérarchie sur 3 niveaux . Sur le deuxième niveau , la plupart des champs me renvoie une réponse afin de compléter le 3eme champ de sélection .
    Cependant , sur certains champ , la requête ne se fait pas .
    J'ai d'abord analysé la base de données ( pour voir si il n'y avait pas d'espaces en fin de texte ) mais cela ne vient pas de là .
    En utilisant l'outil réseau , je me rends compte que ces requêtes qui ne fonctionnent pas sont envoyés en html et non en json .
    Je ne comprends pas pourquoi sur certaines requêtes le format change , pouvez vous m'aider ?

    La partie Ajax 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
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
     
    <script>  
     $(document).ready(function(){ 
      $('#objectifs').hide();
      $('#attentes').hide();
          $('#domaines').change(function(){  
               var domaines = $(this).val();
               $('#objectifs').show();
               console.log(domaines);
               $.ajax({  
                    url:"load_data.php",
                    dataType: "json",  
                    method:"GET",  
                    data:{domaines:domaines},  
                    success:function(data){
                    console.log(data);  
                         $('#objectifs').html(data);  
                    }
               });  
          });
          $('#objectifs').change(function(){  
               var objectifs = $(this).val();
               $('#attentes').show(); 
               console.log(objectifs);
               $.ajax({  
                    url:"load_data2.php",
                    dataType: "json",
                    method:"GET",  
                    data:{objectifs:objectifs},  
                    success:function(data){  
                         $('#attentes').html(data);  
                    }  
               });  
          });   
     });  
     </script>
    load_data.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
     
    <?php
    include 'bsd.php';
    if (isset($_GET['domaines'])) 
    {
     
    $domaines = $_GET['domaines'];
    $req = $bdd->query("SELECT DISTINCT Objectifs FROM attentes_fondamentales WHERE matieresID = '$domaines'");
    $options="";
    		while($donnees = $req->fetch())
    		{
        			$options.='<option value="' . $donnees["Objectifs"] .'">'.  $donnees["Objectifs"].'</option>';
        	}
     
    header('Content-Type: application/json;charset=utf-8');
    echo json_encode($options);
    $req->closeCursor();
     
    }
     
    ?>
    load_data2.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
     
     
    include 'bsd.php';
    if (isset($_GET['objectifs'])) 
    {
     
    $objectifs = $_GET['objectifs'];
    $req = $bdd->query("SELECT DISTINCT attentesNom FROM attentes_fondamentales WHERE Objectifs = '$objectifs'");
    $options="";
    		while($donnees = $req->fetch())
    		{
        			$options.='<option value="' . $donnees["attentesNom"] .'">'. $donnees["attentesNom"].'</option>';
        	}
    header('Content-Type: application/json;charset=utf-8');
    echo json_encode($options);
    $req->closeCursor();
    }
     
    ?>
    Merci d'avance !

  2. #2
    Expert confirmé

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 418
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 5 418
    Par défaut
    Là tu encode en json une chaine de caractères donc tu vas avoir de la bouillie. Il faut faire un tableau php si tu veux avoir un objet json en javascript. Tu pourrais faire :
    Code PHP : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    $options=[];
    while($donnees = $req->fetch())
    {
        	$options[] ='<option value="' . $donnees["Objectifs"] .'">'.  $donnees["Objectifs"].'</option>';
    }
    $req->closeCursor();
    header('Content-Type: application/json;charset=utf-8');
    echo json_encode($options);
    Mais bon cela ne va pas t'avancer puisque tu veux insérer tout le bloc dans le DOM donc autant ne pas utiliser json et envoyer du html.
    Code PHP : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    $options='';
    while($donnees = $req->fetch())
    {
        	$options .='<option value="' . $donnees["Objectifs"] .'">'.  $donnees["Objectifs"].'</option>';
    }
    $req->closeCursor();
    echo $options;
    Dans ce cas n'oublies pas dans ta requête ajax de corriger le retour en remplaçant dataType: "json" par dataType: "html". Tu peux même ne pas mentionner le dataType et jQuery se débrouillera avec ce qu'il trouve.

    Note en php qu'il faut utiliser closeCursor dès que les données de ta requêtes ont été exploitées et dans ton cas elles le sont dès que tu les a enregistrées dans la variable $options.

  3. #3
    Membre averti
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2018
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Août 2018
    Messages : 25
    Par défaut
    Merci pour ta réponse !

    J'ai effectué les modifications en prenant la partie en HTML .
    C'est toujours la même chose sur quelques options . C'est pourtant le même format de fichier , de données , j'ai du mal à comprendre ...
    En farfouillant un peu , j'ai dans la console un message d'erreur :

    ( ! ) Fatal error: Uncaught PDOException: SQLSTATE[42000]: Syntax error or access violation: 1064 Erreur de syntaxe près de 'usage familier et scolaire…'' à la ligne 1 in C:\wamp64\www\EVNH\load_data2.php on line 7
    ( ! ) PDOException: SQLSTATE[42000]: Syntax error or access violation: 1064 Erreur de syntaxe près de 'usage familier et scolaire…'' à la ligne 1 in C:\wamp64\www\EVNH\load_data2.php on line 7
    Mais ce message ne se produit que sur certaines options et pas toutes ...
    Si quelqu'un à une idée , je désespère ...

  4. #4
    Rédacteur/Modérateur
    Avatar de andry.aime
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    8 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Ile Maurice

    Informations forums :
    Inscription : Septembre 2007
    Messages : 8 391
    Par défaut
    Bonjour,

    Parce que la chaîne est tronqué quand la valeur de l'option contient un ' . Utilise une requête préparée au lieu de concaténer directement une valeur dans la requête.

    A+.

  5. #5
    Membre averti
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2018
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Août 2018
    Messages : 25
    Par défaut
    Je vais essayer de modifier cela , je vais voir si cela fonctionne .
    Le problème c'est que le problème ne se pose que sur quelques valeurs d'options . Le reste du temps , les requêtes fonctionnent bien .
    Que veux tu dire par la chaîne est tronquée ? Car sur les autres options qui fonctionnent , l'option value est la même que dans la BDD .

  6. #6
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    1- Merci de cliquer sur le bouton "+ Répondre a la discussion" en bas a gauche.

    2- il faut toujours utiliser htmlspecialchars() à l'affichage (PHP).


    Sinon, si tu ne montres pas ton code...
    Dernière modification par Invité ; 09/10/2018 à 11h34.

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

Discussions similaires

  1. [AJAX] Requête AJAX qui ne fonctionne pas
    Par benoitB dans le forum AJAX
    Réponses: 9
    Dernier message: 29/08/2013, 10h16
  2. Requête SQL qui ne modifie pas la DB
    Par bobbely dans le forum Langage SQL
    Réponses: 8
    Dernier message: 05/12/2011, 18h14
  3. [ZF 1.10] Requête AJAX qui renvoie le layout
    Par cyrux dans le forum Zend Framework
    Réponses: 24
    Dernier message: 25/08/2010, 10h51
  4. Réponses: 1
    Dernier message: 10/08/2010, 14h26
  5. [AJAX] Requête ajax qui renvoie une chaine
    Par DiverSIG dans le forum AJAX
    Réponses: 2
    Dernier message: 02/06/2010, 18h08

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