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

JavaScript Discussion :

Comment utilise-t-on le format JSON ?


Sujet :

JavaScript

  1. #1
    Membre du Club
    Femme Profil pro
    Inscrit en
    Avril 2010
    Messages
    81
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 81
    Points : 44
    Points
    44
    Par défaut Comment utilise-t-on le format JSON ?
    Bonjour à tous,

    J'utilise Ajax pour faire une liste de suggestion. Je m'explique. J'ai un champ de recherche dans lequel je tape le début du nom d'un client.
    Dans une iframe située en dessous, j'affiche dynamiquement les noms qui correspondent.
    Cependant, je voudrais avoir plus que les noms d'affichés.

    Je pensais récupérer les noms en javascript et les transmettre en PHP pour ensuite faire une requête SQL. Mais je crois qu'il est impossible de communiquer entre javascript et PHP.

    Ou alors, je peux récupérer déja l'ensemble des informations en javascript (nom, prénom, age) mais pour les récupérer en PHP il faudrait que j'utilise le format JSON, et je ne sais pas comment faire.

    Pouvez-vous m'aider ? (N'hésiter pas à me demander une partie de mon code)

    Mélanie

  2. #2
    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 640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    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 640
    Points : 66 664
    Points
    66 664
    Billets dans le blog
    1
    Par défaut
    ça s'appelle de l'autocomplétion, ça se fait avec ajax...

  3. #3
    Membre du Club
    Femme Profil pro
    Inscrit en
    Avril 2010
    Messages
    81
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 81
    Points : 44
    Points
    44
    Par défaut
    Oui je sais bien, c'est que je fais.
    J'arrive à afficher une liste de nom dans mon iframe.
    J'arrive également à afficher le prénom et d'autres infos, mais pas sous la forme que je souhaite.
    C'est pourquoi j'aimerais récupérer ces informations en PHP pour les mettre en forme.
    Soit tout récupérer en AJAX et utiliser le format JSON (ou XML je ne sais pas ce qu'est le mieux), soit simplement "envoyer" les noms que je récupère vers mon code PHP.

    Comment faut-il faire ?

  4. #4
    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 640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    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 640
    Points : 66 664
    Points
    66 664
    Billets dans le blog
    1
    Par défaut
    json est plus pratique
    un eval de la chaine reçue en responseText te donneras un objet json direct

  5. #5
    Membre du Club
    Femme Profil pro
    Inscrit en
    Avril 2010
    Messages
    81
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 81
    Points : 44
    Points
    44
    Par défaut
    J'utilise le tuto sur l'autocomplétion de développez.com.

    Si j'ai bien compris, je doit faire ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var res = eval(_xmlHttp.responseText)
    Et ensuite, comment le traiter dans ma page PHP ?

  6. #6
    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 640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    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 640
    Points : 66 664
    Points
    66 664
    Billets dans le blog
    1
    Par défaut
    va
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    r res = eval('"'+_xmlHttp.responseText+'"')
    ensuite res est un objet json

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    var liste='' 
    for (Elt in res{
     liste+=Elt+'\t=>'+res[Elt]+'\n'
    }
     
    alert(liste)

  7. #7
    Membre du Club
    Femme Profil pro
    Inscrit en
    Avril 2010
    Messages
    81
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 81
    Points : 44
    Points
    44
    Par défaut
    Et pour lire mon objet JSON en PHP, je dois faire

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    madiv.innerHTML = liste
    et lire lire le contenu de ma div en PHP ?

  8. #8
    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 640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    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 640
    Points : 66 664
    Points
    66 664
    Billets dans le blog
    1
    Par défaut
    heu tu demandais comment recevoir un objet json coté js ... ou coté php ...

    en php tu recupères le string et tu en fais un unserialize ...

  9. #9
    Membre du Club
    Femme Profil pro
    Inscrit en
    Avril 2010
    Messages
    81
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 81
    Points : 44
    Points
    44
    Par défaut
    Donc coté js je fais :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var res = eval('"'+_xmlHttp.responseText+'"')
    et coté PHP :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $mon_resultat = unserialize (res);
    C'est aussi simple que ça ? (Je doute que php reconnaisse la variable res, il manque surement quelque chose non ?)

  10. #10
    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 640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    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 640
    Points : 66 664
    Points
    66 664
    Billets dans le blog
    1
    Par défaut
    entre php et js tu ne peux faire transiter que du texte

    si ce string est formatté comme un json:
    - un eval coté js le transforme en objet json javascript
    - un unserialize coté php le transforme en objet json php

  11. #11
    Membre du Club
    Femme Profil pro
    Inscrit en
    Avril 2010
    Messages
    81
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 81
    Points : 44
    Points
    44
    Par défaut
    Et si j'ai un
    est-ce que je peux le récupérer dans mon code PHP et le traiter ? (mettre dans une requête SQL)

  12. #12
    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 640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    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 640
    Points : 66 664
    Points
    66 664
    Billets dans le blog
    1
    Par défaut
    recupérer un _xmlHttp.responseXML en php est un non sens

    le responseXML est reçu coté client c'est le serveur qui l'envoie ...

  13. #13
    Membre du Club
    Femme Profil pro
    Inscrit en
    Avril 2010
    Messages
    81
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 81
    Points : 44
    Points
    44
    Par défaut
    Oui je mélange un peu tout...

    Je vais reprendre.

    Pour ma suggestion de saisie j'ai :

    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
    function callSuggestions(valeur){
      if(_xmlHttp&&_xmlHttp.readyState!=0){
        _xmlHttp.abort()
      }
      _xmlHttp=getXMLHTTP();
      if(_xmlHttp){
        //appel à l'url distante
        _xmlHttp.open("GET",_adresseRecherche+"?debut="+valeur,true);
        _xmlHttp.onreadystatechange=function() {
          if(_xmlHttp.readyState==4&&_xmlHttp.responseXML) {
            var liste = traiteXmlSuggestions(_xmlHttp.responseXML)
            cacheResults(valeur,liste)
            metsEnPlace(valeur,liste)
          }
        };
        // envoi de la requete
        _xmlHttp.send(null)
      }
    }
    avec

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    function traiteXmlSuggestions(xmlDoc) {
      var options = xmlDoc.getElementsByTagName('option');
      var optionsListe = new Array();
       for (var i=0; i < options.length; ++i) {
        optionsListe.push(options[i].firstChild.data);
      }
      return optionsListe;
    }
    Puis cela s'affiche dans ma page html avec

    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
    function creeAutocompletionListe(){
      _completeListe=document.createElement("TABLE");
      _completeListe.id="completeTable";
      //document.body.appendChild(_completeListe);
      window.frames['liste_patient'].document.body.appendChild(_completeListe);
    }
     
    function metsEnPlace(valeur, liste) {
      while(_completeListe.childNodes.length>0) {
        _completeListe.removeChild(_completeListe.childNodes[0]);
      }
      for (var i=0; i < liste.length; ++i) {
        var nouveauElmt = document.createElement("TD")
        nouveauElmt.innerHTML = liste[i]
        _completeListe.appendChild(nouveauElmt)
    }
    J'aimerais ne pas afficher les réponses, mais les récupérer dans un code PHP pour faire une requête SQL et afficher mon résultat ensuite.

    Est-ce possible ? Et si oui, comment dois-je m'y prendre?

  14. #14
    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 640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    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 640
    Points : 66 664
    Points
    66 664
    Billets dans le blog
    1
    Par défaut
    Considère ajax comme un coursier qui va faire des aller retours entre client et serveur pour envoyer et ramener du string ...

    un send ajax envoie les données au serveur
    tu recupères le resultat du traitement serveur dans le response d'ajax...

    donc tu cherches à faire un send au serveur ...
    il suffit de concaténer ta chaine string au format json et d'en faire un send au serveur
    coté serveur tu recupères le string que tu unserialize et tu as un objet json php à traire comme un array littéral ...
    Il te suffit ensuite coté php d'exploiter l'objet json pour concatener ta requete sql..
    ensuite exploiter le resultat pour faire un echo d'un string au format json qui sera récupéré dans le responseText que tu evalueras pour faire un objet json coté client que tu pourras exploiter

  15. #15
    Membre du Club
    Femme Profil pro
    Inscrit en
    Avril 2010
    Messages
    81
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 81
    Points : 44
    Points
    44
    Par défaut
    Donc, dans moin fichier.js, je mets au format json

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var res = eval('"'+_xmlHttp.responseText+'"')
    et j'envoie au serveur

    Dans mon fichier.php, je récupère le résultat

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $mon_resultat = unserialize (res);
    je fais ma requete SQL,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Select ... FROM ... WHERE ...=$mon_resultat
    puis

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo unserialize ( $res_de_ma_requete );
    et dans mon fichier.js

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var res = eval('"'+_xmlHttp.responseText+'"')
    Je suis sur la bonne voie ?

  16. #16
    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 640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    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 640
    Points : 66 664
    Points
    66 664
    Billets dans le blog
    1
    Par défaut
    1) je ne comprends pas pourquoi tu renvoie au serveur ce que tu en recois ...

    2) dans le send tu ne peux mettre que du string !!!!

  17. #17
    Membre du Club
    Femme Profil pro
    Inscrit en
    Avril 2010
    Messages
    81
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 81
    Points : 44
    Points
    44
    Par défaut
    L'Ajax c'est tout nouveau pour moi, j'ai du mal à tout saisir...

    Si je fais

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    var res = _xmlHttp.responseText
    _xmlHttp.send(res)
    ça ne sert à rien c'est ça ?

    C'est bien le responseText qui contient Dupont, Durand, Dussole ?
    Comment faire pour récupérer ces infos dans un autre fichier.php (celui qui va afficher le résultat)

  18. #18
    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 640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    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 640
    Points : 66 664
    Points
    66 664
    Billets dans le blog
    1
    Par défaut
    là tu recupères le retour d'ajax ...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var res = _xmlHttp.responseText
    là tu le renvoie au serveur
    ?? quel interet ???

    genre tu recois un cadeau par la poste et tu cours à la poste pour le reexpédier à son expediteur ...

  19. #19
    Membre du Club
    Femme Profil pro
    Inscrit en
    Avril 2010
    Messages
    81
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 81
    Points : 44
    Points
    44
    Par défaut
    Ok ok...

    Alors je vais réfléchir autrement.

    Après ma requête SQL, j'obtiens un tableau avec mes données coté serveur:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $liste = array ("sexe" => $sexe,
    		"nom" => $nom,
    		"prenom" => $prenom,
    		"age" => $age,
    		"id" => $id);
    Comment je peut récupérer en JSON (ou XML) un tableau équivalent pour ensuite l'afficher coté client ?

    Sachant que pour un tableau non associatif, le code était
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    function traiteXmlSuggestions(xmlDoc) {
      var options = xmlDoc.getElementsByTagName('option');
      var optionsListe = new Array();
       for (var i=0; i < options.length; ++i) {
        optionsListe.push(options[i].firstChild.data);
      }

  20. #20
    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 640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    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 640
    Points : 66 664
    Points
    66 664
    Billets dans le blog
    1
    Par défaut
    Tu es donc dans le sens php => js ...

    première question pourquoi ne pas le faire directement coté serveur en php ...
    Tu exploites ton resultat de requete pour rediger le code htlk de la page

    Je pense que tu as un souci appréhension de la chronologie ...

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 3 123 DernièreDernière

Discussions similaires

  1. Réponses: 1
    Dernier message: 18/08/2010, 17h33
  2. Réponses: 6
    Dernier message: 15/01/2009, 11h01
  3. Réponses: 4
    Dernier message: 26/03/2008, 09h38
  4. [CF][C#/VS2003]Comment utiliser format de persistance Xml?
    Par Dobyan08 dans le forum Windows Mobile
    Réponses: 10
    Dernier message: 03/03/2006, 14h11
  5. [TImageList] Comment utiliser le format GIF ?
    Par Pedro dans le forum Composants VCL
    Réponses: 17
    Dernier message: 23/10/2005, 23h08

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