Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Pages: 1
Bonjour,
je commence à implémenter un peu d'Ajax sur mon application, mais je rencontre pas mal de soucis, notamment au niveau du format de données JSON.
Pour commencer, dans mon controleur, j'utilise le contextSwitch
public function init() { $context = $this->_helper->getHelper('contextSwitch'); $context->addActionContext('lirenews', 'json') ->initContext(); } public function lirenewsAction() { // traitement // On se retrouve alors avec un array // $result = array("titre" => "banane", "contenu" => "coucou"); echo Zend_Json_Encoder::encode($result); }
J'ai un bouton sur ma page, permettant de dérouler une news, le contenu et le titre de celle ci se chargeant donc en Ajax. mon script .js :
$(document).ready .... $.ajax({ url: "/article/lirenews", type: "GET", dataType: "json", data: { format: "json", id_membre: id, id_item: article}, success: function(data){ alert('Retour :' + data); } });
Pour tester l'affichage au retour, j'ai inseré un alert(). Et ce dernier ne fonctionne pas. Sauf si je commence le "echo Zend_Json....." du controleur.
La réponse ZF ressemble à ça :
{"module":"default","controller":"articles","action":"lirenews"}{"titre":"banane","contenu":"coucou"}
Merci pour votre aide.
Dernière modification par supertino7 (06-07-2009 19:27:54)
Hors ligne
Après plusieurs essais, c'est vraiment le "echo Zend_Json_Encoder::encode($array);" qui pose problème, dés lors que je le commente, les alertes et les appends passent sans problème.
Il y a quelquechose que je n'ai pas compris peut être ?
Hors ligne
Bon, j'ai avancé un peu dans mon schmilblick.
Je débute encore un peu sous Ajax, c'est pourquoi j'ai encore un peu de mal
En fait, je pense que le problème vient du fait que la réponse en sortie génère 2 tableaux json, l'un avec le {module-action-controller}, et l'autre avec mon echo Zend_Json::encode() , et les uns à la suite des autres. J'imagine que ce n'est pas un format valable et exploitable ?
Apparemment, avec le contextSwitch, le ZF va sérialiser automatiquement toutes les variables de vues, et les incruster à la suite de {module-action-controller}.
J'ai donc mon action lirenewsAction
public function lirenewsAction() { //traitement // on se retouve avec un $article = array("titre" => "banane", "contenu" => "coucou"); $this->view->article= $article; }
et le json generé :
{"module":"default","controller":"articles","action":"lirenews","article":{"titre":"banane","contenu":"coucou"}}
Ca me va. Mais je n'arrive pas à accéder au contenu de article, ni au tableau tout court d'ailleurs.
success: function(data){ alert(data.article); } // Ne produit rien.
Quelqu'un peut me mettre sur la piste ?
merci d'avance.
Hors ligne
Bordel, j'ai enfin trouvé
Alors, lorsque l'on fait un retour en Json, on doit normalement lui appliquer un eval() pour que ce dernier soit converti en objet, lisible par Javscript.
Je me suis dit que JQuery en tant que framework devait forcément appliquer cet eval() automatiquement à un moment donné.
Et effectivement, c'est soit avec $.ajax() en spécifiant le dataType: "json" , soit avec $.getJSON().
En fait, j'avais essayé toutes les combinaisons possibles, et la dernière était la bonne, et elle vient de me faire comprendre pas mal de choses
Hors ligne
il faut éviter le eval autant que possible c'est un trou potentiel d'injection de code
mieux vaut utiliser json.parse quant il est disponible ou une librairie qui le reproduit
A+JYT
Hors ligne
bah je n'utilise pas d'eval du coup, je laisse JQuery le faire, et je pense qu'ils ont du prévoir ce qu'il faut niveau sécurité
Hors ligne
Pages: 1