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:
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:
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:
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