|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||||||
|
Candidat au titre de Membre du Club
![]() Inscription : octobre 2009 Messages : 109 ![]() |
Salut a tous,
Je compte mettre en place un menu latéral hiérarchisé dans mon application ( idem a une arbo de fichier windows). J'aimerais que lorsqu'on clic sur un nœud de la hiérarchie, ses fils soient déroulés via une requête ajax. Le souci : Je débute en JS et en AJAX. J'ai lu la partie integration d'ajax sur symfony mais elle ne m'aide pas tellement. Je vous post les codes déjà créés, hésitez pas a me dire ce qui va pas tant au niveau syntaxe que concept. Affichage : Code :
Code :
L'action (enfin il s'agit d'un component mais ca fonctionne pareil d'apres la doc) : Code :
Merci d'avance |
||||||
|
|
00
|
|
|
#2 | ||
|
Membre habitué
![]() Inscription : septembre 2009 Messages : 85 ![]() |
si tu fait le onclick sur un lien avec une url correcte, ta page va se charger et ajax va s'executer trop tard non?
Mauvaise syntaxe de post sinon, c'est: Code jQuery :
|
||
|
|
00
|
|
|
#3 | ||||
|
Membre habitué
![]() Baptiste NaudinatDéveloppeur Web Inscription : mai 2011 Messages : 70 ![]() |
Hello,
Alors, tout d'abord, au niveau de l'organisation du code : - Ton lien entourant $entreprise->getNom() est fourni par : Code :
<?php echo url_for('Entreprise/edit?id='.$entreprise->getId()) ?> Que ce soit en AJAX ou non, le click sur ce lien doit envoyer une requête, vers une URL. Laquelle veux-tu atteindre exactement ? En allant un peu plus loin, quelles sont les routes associées a ces deux URL ? Concernant l'utilisation d'un component, cela dépend de ce que tu veux faire, mais si tu cherche a atteindre une route Symfony, elle pointera automatiquement vers une action dans un module, donc il faut que ton code soit dans une action. Ensuite concernant ton code javascript il ya une erreur de syntaxe : Code :
Code :
Pour t'aider dans le debugging, utilise aussi FireBug (extension Firefox) : dans l'onglet Console, tu peux voir les requêtes AJAX qui sont envoyées. Ainsi, tu peux plus facilement voir quelle est la requête envoyée, vers quelle URL, avec quels paramètres, etc ... |
||||
|
|
10
|
|
|
#4 | |||||
|
Candidat au titre de Membre du Club
![]() Inscription : octobre 2009 Messages : 109 ![]() |
Citation:
Citation:
Celle du on click : "displayElements/MenuAjax" donne sur le module : DisplayElements, et sur le component MenuAjax voici sa structure : Code :
Citation:
Merci de votre réactivité en tout cas. |
|||||
|
|
00
|
|
|
#5 | ||||
|
Candidat au titre de Membre du Club
![]() Inscription : octobre 2009 Messages : 109 ![]() |
Code :
Code :
|
||||
|
|
00
|
|
|
#6 | |
|
Membre habitué
![]() Inscription : septembre 2009 Messages : 85 ![]() |
Citation:
J'utilise des actions pour Ajax, je fais le foreach dans le template de l'action (ajaxMenuSuccess par exemple) et je renvoie tout ca que j'foure dans un span. (par contre j'ai pas de return ducoup dans mon action, je passe directement dans le template une fois ma collection d'entreprises recue.) |
|
|
|
00
|
|
|
#7 | ||||||||||
|
Membre habitué
![]() Baptiste NaudinatDéveloppeur Web Inscription : mai 2011 Messages : 70 ![]() |
Hello,
Le soucis avec AJAX, c'est que c'est une "méta-technologie" qui repose sur pas mal d'autres. Avant de faire tourner asynchrone, il faut bien comprendre tout le circuit d'une requête synchrone, et avec Symfony, c'est pas forcément évident On va reprendre le circuit de ta requête, dans l'ordre, comme ça tu va voir les points qui ne vont pas : 1 - Tu as sur tes pages un lien comportant un appel javascript : Code :
<a href="#" onclick="menu_ajax('<?php echo $entreprise->getId(); ?>','site') "><?php echo $entreprise->getNom() ; ?> </a>
Code :
Premier problème, cette url n'est pas forcément valide : si tu changes d'environnement ou de serveur, tu risques d'avoir des surprises. Pour ma part, j'utilise la technique suivante : le passe l'url à atteindre en argument de ma fonction AJAX. Ce qui donne des choses comme Code :
Code :
<a href="#" onclick="menu_ajax('<?php echo url_for('@menuAjax') ?>', '<?php echo $entreprise->getId(); ?>','site') "><?php echo $entreprise->getNom() ; ?> </a>
Le reste de la fonction indique que le retour sera écrit dans le conteneur #fils, pour ça pas de problème, mais pour l'instant reprenons notre requête. La requête POST est envoyée vers ton appli Symfony. A partir de là, il faut bien comprendre que ton appli, jusqu'à ce que tu lui indiques l'inverse, réagit comme pour une requête "normale", synchrone. Tu dois donc, comme pour toute requête entrante, avoir une route prête à l'accueillir et à la renvoyer vers un couple action/module. Par exemple, on peut imaginer quelque chose comme : Code :
Tu vas donc définir une action (ici dans mon exemple, l'action menuAjax dans le module menu) : Code :
Code :
Au final, Symfony te renvoie donc uniquement le code [html + params de ton action], qui est intercepté par ta fonction $.post de départ (ce retour se retrouve stocké dans "data") et placé dans un conteneur de ton choix .... ouf ! Ceci est bien sur une manière de faire de l'AJAX avec Symfony parmis tant d'autres, il y manque d'ailleurs beaucoup de choses (au niveau des contrôles principalement : quel est le type de requête ? Quel traitement si quelqu'un essaye de feinter ? Toutes ces choses sont importantes ). L'interêt est surtout de te montrer ceci : quand on fait de l'AJAX, le plus simple est de raisonner en terme de requête/réponse : retracer tout le circuit, bien définir ce que l'on souhaite obtenir et agir au bon endroit. Bon, le café est coulé, maintenant j'vais me mettre à taffer un peu Bon courage à toi ! |
||||||||||
|
|
10
|
|
|
#8 |
|
Candidat au titre de Membre du Club
![]() Inscription : octobre 2009 Messages : 109 ![]() |
Merci beaucoup de ces réponses, me voila bien mieux armé, je vais retenter de mettre en place la requête. Je vous tiens au jus.
|
|
|
00
|
|
|
#9 | ||
|
Candidat au titre de Membre du Club
![]() Inscription : octobre 2009 Messages : 109 ![]() |
J'ai enfin un menu déroulant qui fonctionne bien, merci les gars.
En revanche je me suis heurté à un léger souci : lorsque j'utilisais la méthode onClick même si toutes les étapes étaient faites jusqu’à l’écriture dans le span #fils, symfony écrasait mon menu (et donc le résultat de ma requête). Il recharge le menu j'ai l'impression. Mais en passant au JS comme ceci aucun problème : Code :
|
||
|
|
00
|
Copyright © 2000-2012 - www.developpez.com