Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 02-02-2010 16:04:01

Godzinho
Membre
Lieu: Toulouse
Date d'inscription: 15-10-2009
Messages: 58

[Résolu][ZF 1.6]Problème avec $.getJSON

Bonjour,

j'essaie actuellement de récupérer dans mon javascript, une variable au format json.

J'ai suivi la documentation sur le AjaxContext.

Voici mon problème.

AjaxController :

Code:

class AjaxController extends Zend_Controller_Action {
    public function init(){
        $this->_helper->layout()->disableLayout();
        $ajax = $this->_helper->getHelper('AjaxContent');
        
        // on autorise l'action jsonbadge à répondre aux requêtes ajax
        $ajax->addActionContext('jsonbadge','json')
            ->initContext();
    }
    
    public function jsonbadgeAction(){
        $id = $this->_getParam('id');
        $TBadges = new TRefBadges();
        $badge = $TBadges->getJsonBadge($id);
        
        // retour du résultat au format json
        $this->view->jsonBadge = Zend_Json::encode($badge);
    }
}

Fichier javascript :

Code:

$.getJSON(urlBase+'/ajax/jsonbadge/format/json/id/'+id, function(json){
    alert(json);
    alert('dans getJson');
});

Je ne rentre jamais dans le getJSON et je ne sais pas comment faire.

Merci d'avance pour votre aide.

Dernière modification par Godzinho (03-02-2010 12:47:36)

Hors ligne

 

#2 02-02-2010 16:32:50

Delprog
Administrateur
Date d'inscription: 29-09-2008
Messages: 670

Re: [Résolu][ZF 1.6]Problème avec $.getJSON

Salut,

Tu as une petite erreur de syntaxe ici :

Code:

$ajax = $this->_helper->getHelper('AjaxContent');  // <- AjaxContext

Mais je ne sais pas si c'est ça ou une erreur de recopie smile

A priori ton code devrait fonctionner.

Par contre, inutile de désactiver le layout, le switcher de context s'en occupe.

A+ benjamin.


http://www.anonymation.com/ - anonymation - Studio de création.
http://code.anonymation.com/ - anonymation - blog - développement et architecture web

Hors ligne

 

#3 02-02-2010 17:30:58

nORKy
Membre
Date d'inscription: 06-03-2008
Messages: 1098

Re: [Résolu][ZF 1.6]Problème avec $.getJSON

Précision, il me semble qu'il n'est pas nécessaire d'encoder en JSON car, le helper ajaxonctext de type Json, active un "serialiseur" qui va sérialiser en json les variables de la vue (c'est clair ?)

Sinon, pour ton problème, il faut voir tout ton code javascript


----
Gruiiik !

Hors ligne

 

#4 03-02-2010 08:18:39

Godzinho
Membre
Lieu: Toulouse
Date d'inscription: 15-10-2009
Messages: 58

Re: [Résolu][ZF 1.6]Problème avec $.getJSON

Très bien merci pour vos informations. Cela fonctionne maintenant.
Il s'agissait surement du "AjaxContent" mais également du urlBase dans mon javascript.
En effet j'ai essayé un alert sur urlBase et rien ne s'affichait.

Sur vos conseils j'ai également enlevé la désactivation du layout et l'enodage en Json.

Ma question maintenant est : comment récupérer mon urlBase pour m'éviter de taper le chemin complet dans le javascript, sachant que mes traitements ajax sont dans un fichier assign.js qui n'a pas accès au Front Controller ?

Encore merci.

Hors ligne

 

#5 03-02-2010 09:05:31

nORKy
Membre
Date d'inscription: 06-03-2008
Messages: 1098

Re: [Résolu][ZF 1.6]Problème avec $.getJSON

Ma solution perso (a prendre ou pas) :
Dans mon bootstrap :

Code:

$view->headScript()->prependScript('app = { baseUrl: "'.$view->baseUrl().'" };');

----
Gruiiik !

Hors ligne

 

#6 03-02-2010 09:14:17

Godzinho
Membre
Lieu: Toulouse
Date d'inscription: 15-10-2009
Messages: 58

Re: [Résolu][ZF 1.6]Problème avec $.getJSON

Comment initialises-tu $view dans ton bootstrap ?

En faisant un simple

Code:

$view = new Zend_View();

et en mettant la ligne de code que tu m'as donné, mon appli ne fonctionne plus.

J'ai essayé autrement en fonction des autres fonctions proposés par l'autocomplétion, mais je n'y arrive pas.

Dernière modification par Godzinho (03-02-2010 09:34:03)

Hors ligne

 

#7 03-02-2010 10:54:55

nORKy
Membre
Date d'inscription: 06-03-2008
Messages: 1098

Re: [Résolu][ZF 1.6]Problème avec $.getJSON

Godzinho a écrit:

Comment initialises-tu $view dans ton bootstrap ?

En faisant un simple

Code:

$view = new Zend_View();

et en mettant la ligne de code que tu m'as donné, mon appli ne fonctionne plus.

J'ai essayé autrement en fonction des autres fonctions proposés par l'autocomplétion, mais je n'y arrive pas.

Nan

T'as pas lu la doc de Zend_Application Toi... :p

Code:

protected function _initHeadView()
  {
    $this->bootstrap('view');
    $view = $this->getResource('view');
    
    $view->headLink()->appendStylesheet($view->baseUrl('/css/style.css'));
    $view->headScript()->prependScript('site = { baseUrl: "'.$view->baseUrl().'" };');
  }

Dernière modification par nORKy (03-02-2010 10:56:33)


----
Gruiiik !

Hors ligne

 

#8 03-02-2010 11:16:23

Godzinho
Membre
Lieu: Toulouse
Date d'inscription: 15-10-2009
Messages: 58

Re: [Résolu][ZF 1.6]Problème avec $.getJSON

Je n'utilise pas Zend_Application, je dois faire une mauvaise utilisation du framework.
Du coup je n'ai pas de bootstrap à proprement parler. J'initialise tout dans mon index.php. J'ai compris que mon index.php était mon bootstrap.

Est-il possible de fonctionner ainsi ?

Voici le code de mon index.php

Code:

<?php 
// définition des chemins utiles
$rootPath = dirname(dirname(__FILE__));
$appPath  = $rootPath . DIRECTORY_SEPARATOR . 'application';
$confPath = $appPath  . DIRECTORY_SEPARATOR . 'configs';

// configuration de l'include_path PHP pour l'autoload
set_include_path(get_include_path() . 
PATH_SEPARATOR . $appPath . 
PATH_SEPARATOR . $rootPath . DIRECTORY_SEPARATOR . 'library' . 
PATH_SEPARATOR . $appPath  . DIRECTORY_SEPARATOR . 'models');

// Utilisation de Zend_Loader
require_once 'Zend/Loader.php';

// Chargement automatique des classes
Zend_Loader::registerAutoload();

Zend_Registry::set('rootPath',$rootPath);

// UrlBase pour javascript


// Récupération des objets de configuration
$configAppli   = new Zend_Config_Ini($confPath . DIRECTORY_SEPARATOR . 'application.ini', 'dev');
$configMain    = new Zend_Config_Ini($confPath . DIRECTORY_SEPARATOR . 'config.ini', 'dev');
$configSession = new Zend_Config_Ini($confPath . DIRECTORY_SEPARATOR . 'session.ini','dev');
Zend_Session::setOptions($configSession->toArray());

// Partage (et création ou restauration) de l'objet de session dans le registre
// Ce premier appel à new Zend_Session_Namespace démarre la session PHP
Zend_Registry::set('session', $session = new Zend_Session_Namespace($configSession->name));

try {
    $db = Zend_Db::factory($configMain->database);
    $db->query("SET NAMES 'UTF8'");
    
    // Passage de la connexion à toutes les classes passerelles
    Zend_Db_Table_Abstract::setDefaultAdapter($db);
} catch (Zend_Db_Exception $e) {
    // on passe l'exception sous silence, elle sera gérée dans le système MVC plus tard 
}

// Ajout du chemin des aides d'action dans le gestionnaire d'aides MVC
Zend_Controller_Action_HelperBroker::addPrefix('Arbo_Controller_ActionHelpers');

// Configuration du contrôleur frontal
$fc = Zend_Controller_Front::getInstance();
$fc->setControllerDirectory($appPath . DIRECTORY_SEPARATOR . 'controllers');
$fc->throwExceptions(true); // par défaut

// propagation de paramètres dans le système MVC
$fc->setParam('debug', $configMain->debug);
$fc->setParam('config', $configMain);

$options = array('layoutPath' => $appPath . DIRECTORY_SEPARATOR . 'views' . DIRECTORY_SEPARATOR . 'layouts');
Zend_Layout::startMvc($options);

try {
    $fc->dispatch();
} catch (Zend_Exception $e) {
    echo $e->getMessage();
}
?>

Dernière modification par Godzinho (03-02-2010 11:25:43)

Hors ligne

 

#9 03-02-2010 11:55:00

Delprog
Administrateur
Date d'inscription: 29-09-2008
Messages: 670

Re: [Résolu][ZF 1.6]Problème avec $.getJSON

Salut,

Tu peux aussi utiliser la ligne que t'as filé nORKy directement dans la vue ou dans le layout en remplaçant $view par $this :

Code:

$this->headScript()->prependScript('site = { baseUrl: "'.$this->baseUrl().'" };');

Sinon, pour faire comme nORKy sans Zend_Application il te faudra, dans ton bootstrap (ou initializer) instancier toi même la vue, ajouter le script et passer la vue au view renderer

Code:

$view = new Zend_View();
$view->headScript()->prependScript('site = { baseUrl: "'.$view->baseUrl().'" };');

$viewRenderer = Zend_Controller_Action_HelperBroker::getStaticHelper('viewRenderer');
$viewRenderer->initView();
$viewRenderer->setView($view);

Ou sinon par un helper d'action ou encore par un controller d'action commun à tous tes controlleurs.

Mais Zend_Application c'est le bien !


A+ benjamin.


http://www.anonymation.com/ - anonymation - Studio de création.
http://code.anonymation.com/ - anonymation - blog - développement et architecture web

Hors ligne

 

#10 03-02-2010 12:46:38

Godzinho
Membre
Lieu: Toulouse
Date d'inscription: 15-10-2009
Messages: 58

Re: [Résolu][ZF 1.6]Problème avec $.getJSON

Très bien merci à tous les deux.
Je ne connaissais cette méthode pour passer une variable du php vers le javascript.

Je peux me mettre au boulot !!!

Hors ligne

 

#11 03-02-2010 13:00:28

Delprog
Administrateur
Date d'inscription: 29-09-2008
Messages: 670

Re: [Résolu][ZF 1.6]Problème avec $.getJSON

En fait, les méthodes prependScript ou appendScript ne font que créer une balise <script> dans ton code qui contient ce que tu passes en paramètres.

Tu pourrais aussi le faire à la mano si tu le fais directement la vue ou le layout hein smile

L'avantage est aussi de pouvoir le préparer avant le rendu.


A+ benjamin.


http://www.anonymation.com/ - anonymation - Studio de création.
http://code.anonymation.com/ - anonymation - blog - développement et architecture web

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