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

Symfony PHP Discussion :

Encodage Json d'objets Doctrine [2.x]


Sujet :

Symfony PHP

  1. #1
    Membre éprouvé
    Homme Profil pro
    Directeur
    Inscrit en
    Avril 2003
    Messages
    724
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur

    Informations forums :
    Inscription : Avril 2003
    Messages : 724
    Points : 1 166
    Points
    1 166
    Par défaut Encodage Json d'objets Doctrine
    Bonjour,

    Sur une page qui affiche les data d'un client j'ai une liste déroulante.
    Je veux que la page se synchronise sur le client sélectionné avec la liste.
    L'événement change de la combo est intercepté dans une fonction jQuery.
    Une requête Ajax est émise vers le contrôleur, qui doit retourner les data du client pour mettre à jour la page.
    Le gestionnaire d'événement Jquery est le suivant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    $("#cboSelClient").change(function(){
        var id=$(this).val();
        $.getJSON(
            'http://localhost/symfony_master/web/app_dev.php/comptoir/voirClient/'+id,
            function(data){
                $.each(data, function(name, value){
                    alert(value);
                });   
            }
        );
    });
    A l'autre bout, la partie du contrôleur qui traite la requête est la suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    public function showClientAction(Client $client){       
        // si c'est une requête ajax...
        $request=$this->getRequest();
        if( $request->isXmlHttpRequest() ){
            // encode $client to json format
            $userDataAsJson = $this->encodeUserDataToJson($client);
            // rend la réponse
            return new response(json_encode($client));
     
        }//if requête AJAX
    ----- reste de la fonction
    Avec la fonction qui encode l'objet en Json:
    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
     
    private function encodeUserDataToJson(Client $client)
    {
        $userData = array(
            'id' => $client->getId(),
            'societe' => $client->getSociete(),
            'contact'   => $client->getContact(),
            'adr1'  =>$client->getAdr1(),
            'adr2'=>$client->getAdr2(),
            'ville'=>$client->getVille(),
            'cp'=>$client->getCp()
        );
        $jsonEncoder = new JsonEncoder();       
        return $jsonEncoder->encode($userData, $format = 'json');
    }
    Problème: l'argument data de la fonction callback jQuery contient une chaine de caractères:
    "{"id":1,"societe":"Linceo Informatique","contact":"Philippe PONS","adr1":"184 BD VOLTAIRE","adr2":"1er \u00e9tage","ville":"Paris","cp":"75011"}"

    Ca ressemble à un objet, mais c'est une chaine de caractère! Impossible d'extraire les valeurs des propriétés!

    Si quelqu'un à une idée, je suis preneur…
    Merci d'avance.
    Philippe

  2. #2
    Membre habitué Avatar de anta_res
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2006
    Messages
    93
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Mai 2006
    Messages : 93
    Points : 173
    Points
    173
    Par défaut
    Je pense que ceci pourrait t'aider. Une petite recherche dans google et voila le résultat : http://api.jquery.com/jQuery.parseJSON/

  3. #3
    Membre éprouvé
    Homme Profil pro
    Directeur
    Inscrit en
    Avril 2003
    Messages
    724
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur

    Informations forums :
    Inscription : Avril 2003
    Messages : 724
    Points : 1 166
    Points
    1 166
    Par défaut
    Merci pour ta réponse: je peux marquer le fil comme résolu!
    Je n'ai pas été très perspicace sur ce coups là, en cherchant du côté server, alors que le problème était du côté client.

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Février 2009
    Messages
    66
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 66
    Points : 82
    Points
    82
    Par défaut
    C'est n'est pas bon du tout. C'est le header content type de ta réponse qui n'est pas bon.
    Si tu utilises la version 2.1 de Symfony tu peux retourner un objet JsonResponse.

    https://github.com/symfony/symfony/b...onResponse.php

    Si tu utilises la version 2.0 il te faut passer le bon content type dans ta response.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $response->headers->set('Content-Type', 'application/json');

  5. #5
    Membre éprouvé
    Homme Profil pro
    Directeur
    Inscrit en
    Avril 2003
    Messages
    724
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur

    Informations forums :
    Inscription : Avril 2003
    Messages : 724
    Points : 1 166
    Points
    1 166
    Par défaut
    version 2.1
    merci de ta réponse
    oui, c'est certainement mieux en spécifiant le header content, mais ça ne change par le fait de devoir parser la réponse, comme ceci:
    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
     
    $("#cboSelClient").change(function(){
        var id=$(this).val();
        $.getJSON(
            'http://localhost/symfony_master/web/app_dev.php/comptoir/voirClient/'+id,
            function(data){
                // parser la réponse
                var oData=$.parseJSON(data);
                // vider tous les champs
                $("input[type='text']").each(function(){
                    $(this).val("");
                });
                $.each(oData, function(name, value){
                    // écrire les valeurs dans les champs
                    $("input#linceo_comptoirbundle_clienttype_"+name).val(value);
     
                });   
            }
        );
    });

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

Discussions similaires

  1. string json to objet python
    Par lenoil dans le forum Général Python
    Réponses: 4
    Dernier message: 15/11/2012, 10h45
  2. Réponses: 2
    Dernier message: 03/05/2012, 20h35
  3. [MySQL] Probleme encodage JSON/PHP
    Par tomy29 dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 12/03/2012, 09h36
  4. les accent entre PHP et JQuery et encodage json
    Par nicko_73 dans le forum jQuery
    Réponses: 1
    Dernier message: 22/12/2009, 15h43
  5. [POO] json et objet javascript
    Par kimcharlene dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 17/05/2008, 23h10

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