Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 06-07-2009 19:10:23

supertino7
Membre
Date d'inscription: 21-02-2009
Messages: 113

[JQuery] après un encodage Zend_Json, rien ne se passe.

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

Code:

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 :

Code:

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

Code:

{"module":"default","controller":"articles","action":"lirenews"}{"titre":"banane","contenu":"coucou"}

Merci pour votre aide. smile

Dernière modification par supertino7 (06-07-2009 19:27:54)

Hors ligne

 

#2 06-07-2009 19:34:47

supertino7
Membre
Date d'inscription: 21-02-2009
Messages: 113

Re: [JQuery] après un encodage Zend_Json, rien ne se passe.

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

 

#3 07-07-2009 11:42:57

supertino7
Membre
Date d'inscription: 21-02-2009
Messages: 113

Re: [JQuery] après un encodage Zend_Json, rien ne se passe.

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 smile

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

Code:

public function lirenewsAction()
    {
        //traitement
        // on se retouve avec un $article = array("titre" => "banane", "contenu" => "coucou");
        $this->view->article= $article;
    }

et le json generé :

Code:

{"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.

Code:

success: function(data){
            alert(data.article);
        }
// Ne produit rien.

Quelqu'un peut me mettre sur la piste ?

merci d'avance.

Hors ligne

 

#4 07-07-2009 12:25:06

supertino7
Membre
Date d'inscription: 21-02-2009
Messages: 113

Re: [JQuery] après un encodage Zend_Json, rien ne se passe.

Bordel, j'ai enfin trouvé big_smile

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 big_smile

Hors ligne

 

#5 07-07-2009 12:49:03

sekaijin
Membre
Date d'inscription: 17-08-2007
Messages: 1137

Re: [JQuery] après un encodage Zend_Json, rien ne se passe.

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

 

#6 09-07-2009 11:30:38

supertino7
Membre
Date d'inscription: 21-02-2009
Messages: 113

Re: [JQuery] après un encodage Zend_Json, rien ne se passe.

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é smile

Hors ligne

 

Pied de page des forums

Propulsé par PunBB
© Copyright 2002–2005 Rickard Andersson
Traduction par punbb.fr

Graphisme réalisé par l'agence Rodolphe Eveilleau
Développement par Kitpages