Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Salut à tous,
Je souhaite développer quelques éléments en AJAX, apparamment le choix peut se porter sur plusieurs bibliothèques javascript :
- prototype
- json
Sachant que ZF intègre Zend_json, doit on nécessairement l'utiliser ou peut simplement utiliser prototype avec ZF.
En fait je n'ai que trop peu de connaissances en Ajax et vos avis sur quoi utiliser me permettraient de chercher dans une bonne direction.
Note : je ne connais ni JSON ni prototype.
Merci de vos conseils.
a+ Frédéric
Hors ligne
Bonjour,
Attention, il ne faut pas confondre JSON n'est pas AJAX
JSON : c'est un format. il te donne la possibilité de transformer un objet Javascript en chaine et inversement. C'est très pratique pour par exemple répondre à une requete AJAX. Coté PHP, tu transforme une tableau associatif par exemple en format JSON et coté Javascript, tu le transforme en objet (très rapide).
Pour plus d'infos sur JSON : http://www.json.org/jsonfr.html
prototype : C'est un "framework" JavaScript qui te simplifi la vie pour les requetes AJAX
Pour plus d'infos sur prototype: http://www.prototypejs.org
Ca t'aide ?
Hors ligne
Salut Olivier,
merci de ta réponse, donc pour faire du Ajax avec ZF on peut utiliser une librairie du type prototype sans passer par JSON ??? même si celui ci peut faciliter l'échange de données entre javascript et php (si j'ai bien compris).
je regarde les liens que tu m'as donnés.
a+ Frédéric
Hors ligne
Oui sans problème.
Je prépare un tuto là dessus "ZF ajax avec prototype" ... (dans quelques jours )
A+
Olivier
Dernière modification par golivier (13-09-2007 10:59:33)
Hors ligne
superbe idée pour ton tuto, j'ai hate de le lire. En attendant je fais des recherches sur le web !
a+ Frédéric
Hors ligne
Il y a aussi la librarie javascript JQuery qui simplifie les requêtes Ajax: http://docs.jquery.com/Ajax
Il faut bien comprendre que "faire de l'ajax" ce n'est que appeler un script (PHP ou autre) qui retourne du texte (ou de l'xml, mais c'est toujours du texte ). On peut ainsi faire ce que l'on veut du retour de la requête (modifier le contenu de la page par exemple...)
Hors ligne
Vite fait pour l'exemple :
Dans un fichier Javascript :
var url = 'http://localhost/monSite/'; /* ------------------------------------- dispatch(href) ------------------------------------- */ function dispatch(href) { var success = function(t){dispatchResponse(t);} // dispatchResponse est la fonction exécutée à la réponse du serveur var result = new Ajax.Request(url + href,{onSuccess:success}); } /*------------------------------------- * dispatchResponse(t) * t server response * return void /*-------------------------------------*/ function dispatchResponse(t){ try{ var myContents = eval( '(' + t.responseText + ')' ); // myContents reçoit le html que tu as retourné } } catch (ex) { var error = '<br />AJAX : Une erreur est survenue ('+ex.name+' :: '+ex.message+')<br /><br />'+t.responseText; $('errorZone').innerHTML = error; $('messages').style.display = 'block'; } }
Maintenant du html : en cliquant sur le lien, tu appelles la fonction js "dispatch" qui appellera côté ZF le controleur FicheController et l'action NewAction.
<a href="javascript:dispatch('fiche/new/');" title="nouvelle fiche">créer une fiche</a>
Pour finir du côté PHP, tu traites la demande, tu génères du html. Personnellement, je fais dans le Response object, un truc genre :
// Où : //$id est l'id du div qui recevra le html, par exemple //$this->proxy->render('Proxy.tpl')) est en fait le render délivré par Smarty // J'encode le tout en utf8 pasque Javascript aime bien ça // $this->sendResponse(); retourne le tout au navigateur et la fonction dispatchResponse dans JS traite le contenu $toDisplay[] = array($id,utf8_encode($this->proxy->render('Proxy.tpl')),null); $json = $this->encoder->encode($toDisplay); $this->setHeader('Content-Type', 'text/x-json; charset=UTF-8') ->setBody($json); $this->sendResponse();
Tu peux édulcorer la partie du response object qui est trés spécifique pour mes besoins (à savoir, la possibilité de mettre à jour différentes parties de la page html à partitr d'une seule action).
En espérant que ça peut t'aider.
Fred
Hors ligne
Merci de vos réponses les amis,
en attendant j'ai un peu bossé et suivit quelques tutos, notamment celui d'IBM sur Ajax en utilisant prototype.
Voici ce que j'ai fait :
Ca c'est dans mon header.tpl (template Smarty)
{literal} <script src="/zendframework_smarty/public/scripts/prototype.js"></script> <script type="text/javascript"> function getDescription(id){ var url = 'http://localhost/zendframework_smarty/index/description'; var myAjax = new Ajax.Request ( url, { method: 'get', parameters: 'albumId='+id, onSuccess: renderResults } ); } function renderResults(response){ var renderDiv = document.getElementById('description'); renderDiv.innerHTML = response.responseText; } </script> {/literal}
je soughaite afficher dans un div "description" la description que je vais chercher dans mon controller descriptionAction.
Voici la tête de mon action :
public function descriptionAction() { $albumId = $this->getRequest()->getParam('albumId'); $this->view->id=$albumId; echo $this->view->render("index/description.tpl"); }
Voici le code de mon template Smarty description.tpl :
Album : {$id}
Un exemple super simple qui marche nickel. Il suffit que je fasse maintenant une petite requete pour choper la description dans la table et l'afficher dans le Template. Un exemple simple qui marche bien.
a+ Frédéric
Dernière modification par frederic (13-09-2007 14:00:12)
Hors ligne
Si ton but c'est de mettre a jours un DIV avec le résultat de ta requête Ajax, il y a plus simple a faire.
new Ajax.Updater('description', 'http://localhost/zendframework_smarty/index/description', { parameters: { 'albumId='+id }, method:'get', });
Par default, l'insertion est en update (remplace le contenu) mais tu peux modifier le comportement en ajoutant un parametre du type "insertion:Insertion.Top"
Hors ligne
Salut Titerm, merci de ton conseil il a été utile.
a+ Frédéric
Hors ligne
Salut,
quelqu'un a t-il déjà eu des problèmes avec Ajax.Updater sous IE6 ?
J'ai pour le moment une erreur sur la page.
a+ Frédéric
Hors ligne
Non, aucun pb ni si ff, ni opera, ni Ie 5, 6 ou 7
Hors ligne
Oui il faut faire attention à ne pas confondre Ajax et Php...
Je ne parle pas pour toi fred, mais à mon grand étonnement, j'ai reçu au bureau il y a quelques jours, un "développeur" qui à "développé" un e-commerce.
Ce dernier, ma soutenu que "Ajax allait bientôt dépasser PHP" (cela n'a complétement rien a voir), que "Ajax apporté beaucoups en sécurité" (alors que les développeurs pro ont plus tendance à souligner les faiblesses niveau sécurité de cette méthode).
Il y a des fois oû je me pose vraiment des questions sur les compétences que certains veulent mettre en valeur...
(post hors-sujet, mais ca me fait plaisir de le souligner)
Hors ligne
Ne pas oublier Mootools en framework javascript qui est aussi excellent.
Quand au fameux problème de sécurité ca me fait doucement rigoler car si le coté serveur est correctement codé je ne vois pas quelle faiblesse pourrait avoir une requete ajax par apport à une requete http normale, bref ...
Hors ligne
J'ai déjà entendu parlé de quelques problèmes de sécurité, mais je ne saurais te les lister.
Bien entendu, si côté serveur ça ne suit pas...
Pour les frameworks, j'utilise protoype + script.aculo.us (en option).
J'ai tester RICO, et je te le déconseille vivement de par son manque d'extensibilité dans certains composants.
A tester aussi, le framework google (il me semble qui permet de lié js et java, je crois),
Yahoo a aussi fait quelque chose d'intéressant...
Sinon, il y a aussi DOJO, qui lui est supporté par IBM.
En attendant avce impatience le socle commun AjaxHub qui sera en discussion lors d'un consortium Openajax qui regroupe des société comme yahoo, google, amazon... socle commun aux très nombreu framework ajax.
Dernière modification par Phoenix17 (18-11-2007 19:59:17)
Hors ligne