Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Bonjour,
je développe une application avec Zend et je veux utiliser Ajax.
le probléme c'est que je reçois une réponse JSON comme suit
le nombre des résultats que je dois les recevoir est 2 mais je les reçois vides {"users":[{},{}]}
par contre si je fait var_dump il me retourne un array à deux éléments non vides
Merci d'avance pour votre aide.
Hors ligne
Si tu pouvais nous montrer un peu plus de code...
Hors ligne
Voilà le code et Merci d'avance.
***** J'utilise JQUERY*****
Le Bootstrap
public function _initViewHelpers(){ $this->bootstrap('layout'); $layout = $this->getResource('layout'); $view = $layout->getView(); Zend_Layout::startMvc(); $view->doctype('HTML4_STRICT'); $view->headTitle('Login'); $view->headMeta()->appendHttpEquiv('Content-type','text/html;charset=utf-8'); $view->headLink()->appendStylesheet('/css/style.css'); $view->headLink()->appendStylesheet('/css/ltr.css'); ZendX_JQuery::enableView($view); } protected function _initJquery() { $this->bootstrap('view'); $view = $this->getResource('view'); //get the view object //add the jquery view helper path into your project $view->addHelperPath("ZendX/JQuery/View/Helper", "ZendX_JQuery_View_Helper"); //jquery lib includes here (default loads from google CDN) $view->jQuery()->enable() ->addStylesheet('https://ajax.googleapis.com/ajax/libs/jqueryui/1.8/themes/ui-lightness/jquery-ui.css')//add the css ->uiEnable();//enable ui }
Le Controlleur
public function init() { $contextSwitch = $this->_helper->getHelper('contextSwitch'); $contextSwitch->addActionContext('list','json') ->initContext(); } public function listAction() { $mapper = new Users_Model_UserMapper(); $result = $mapper->fetchAll(); $paginator = new Zend_Paginator(new Zend_Paginator_Adapter_Array($result)); $paginator->setItemCountPerPage(4) ->setCurrentPageNumber($this->_getParam('page'),1); $users = array(); foreach($paginator as $user) { $users[] = $user; } $this->view->users = $users; if(!$this->_request->isXmlHttpRequest()) $this->view->paginator = $paginator; }
ajaxtest.html
<script src="/js/jquery/js/jquery-1.7.1.min.js"></script> <script> $(document).ready(function(){ $('#test').click(function(){ $.ajax({ url: '/fr/backend/users/list/', type : 'POST', data : 'format=json', async: false, success : function(response){ //alert(response); } }) }) }) </script> <a id="test">test</a>
Hors ligne
Salut,
Je suis pas très calé en JavaScript... mais :
Quand tu fais joujou avec l'Ajax, tu as une aide de vue spécifique qui est AjaxContext (et qui remplace ContextSwitch) qui est spécialement faite pour réagir aux requêtes Ajax.
public function init() { $ajaxContext = $this->_helper->getHelper('ajaxContext'); $ajaxContext->addActionContext('list','json') ->initContext(); }
Est-ce que ça change quelque chose ou ta réponse que tu récupères en JavaScript est toujours vide ? Logiquement, si tu spécifies bien 'json' dans la fonction addActionContext, il devrait automatiquement convertir toutes les valeurs que tu passes à la vue en json sans que tu n'ai besoin de le faire.
Hors ligne
j'ai changé comme vous m'avez demandé
$ajaxSwitch = $this->_helper->getHelper('ajaxSwitch'); $ajaxSwitch->addActionContext('list','json') ->initContext();
il me retourne cet erreur
Fatal error: Uncaught exception 'Zend_Loader_PluginLoader_Exception' with message 'Plugin by name 'AjaxSwitch' was not found in the registry; used paths: Zend_Controller_Action_Helper_: Zend/Controller/Action/Helper/' in /usr/share/php/Zend/Loader/PluginLoader.php:412
Hors ligne
Oops ce n'est pas AjaxSwitch mais AjaxContext le nom du helper, autant pour moi .
Hors ligne
ça me retourne deux tableaux vides !!!
{"users":[{}],"paginator":{}}
Hors ligne
Mais avec ajaxContext je reçois tous les resultat en JSON pas contre moi je travaille sur pagination en ajax de façon je dois récupérer un array paginator
public function listAction() { $mapper = new Users_Model_UserMapper(); $result = $mapper->fetchAll(); $paginator = new Zend_Paginator(new Zend_Paginator_Adapter_Array($result)); $paginator->setItemCountPerPage(1) ->setCurrentPageNumber($this->_getParam('page'),1); $users = array(); foreach($paginator as $user) { $users[] = $user; } $this->view->users = $users; //var_dump($this->_request->isXmlHttpRequest()); if(!$this->_request->isXmlHttpRequest()) $this->view->paginator = $paginator; }
Hors ligne