Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Bonjour mes amis,
Je suis un développeur mais nouveau en ZF3.
J'ai essayé d'utiliser ajax jquery pour afficher certaines données depuis mysql sans recharger ma page.
J'ai suivi tous les principes d'utilisation d'ajax jquery, mais je n'arrive a avoir la bonne reponse, j'ai eu toujours une réponse d'échec. Voici mon code ci-dessous. Je serais très heureux si quelqu'un pouvait m'aider.
[lang=php] //In my Controller public function remplirAction() { $data = $this->entityManager->getRepository(Entite::class)->findAll(); $request = $this->getRequest(); $query = $request->getQuery(); if ($request->isXmlHttpRequest()) { $jsonData = array(); $idx = 0; foreach($data as $sampledata) { $temp = array( 'id' => $sampledata->getId(), 'nom' => $sampledata->getNom(), 'adresse' => $sampledata->getAdresse() ); $jsonData[$idx++] = $temp; } $view = new JsonModel($jsonData); $view->setTerminal(true); } else { $view = new ViewModel(); } return $view; }
View: index.phtml
[lang=phtml] <script language = "javascript"> $(document).ready(function(){ $("#loadbook").on("click", function(event){ $.ajax({ url: '/remplir', type: 'POST', dataType: 'json', async: true, success: function(data, status) { var e = $('<tr><th>ID</th><th>Nom</th><th>Adresse</th></tr>'); $('#book').html(''); $('#book').append(e); for(i = 0; i < data.length; i++) { book = data[i]; var e = $('<tr><td id = "id"></td><td id = "nom"></td><td id = "adresse"></td></tr>'); $('#id', e).html(book['id']); $('#nom', e).html(book['nom']); $('#adresse', e).html(book['adresse']); $('#book').append(e); } }, error : function(xhr, textStatus, errorThrown) { alert('Ajax request failed.'); } }); }); }); </script>
Hors ligne
Salut !
Déjà, question de lisibilité, tu peux réécrire ton controlleur :
[lang=php] //In my Controller public function remplirAction() { if ($request->isXmlHttpRequest()) { return new ViewModel(); } $data = $this->entityManager->getRepository(Entite::class)->findAll(); $request = $this->getRequest(); $query = $request->getQuery(); $jsonData = []; $idx = 0; foreach($data as $sampledata) { $temp = [ 'id' => $sampledata->getId(), 'nom' => $sampledata->getNom(), 'adresse' => $sampledata->getAdresse(), ]; $jsonData[$idx++] = $temp; } $view = new JsonModel($jsonData); $view->setTerminal(true); return $view; }
Je suis par ailleurs étonné par le fait de renvoyer un view model vide quand c'est n'est pas une XML HTTP Request, mais pourquoi pas.
Pour le reste, il faut utiliser les developer tools de ton navigateur et regarder en console. Tu auras probablement des erreurs dans la partie networking et tu peux faire un console.log(errorThrown) au lieu de l'alert pour voir ce qu'il se passe.
Hors ligne
Merci Théocrite de repondre aussi rapide a ma requete,
Je vais essayer les modifications que vous me conseillez.
Merci encore,
Hors ligne
Même étonnement pour moi, j'aurais fait ça, plus propre selon moi :
[lang=php] //In my Controller public function remplirAction() { $request = $this->getRequest(); if (! $request->isXmlHttpRequest()) { return $this->notFoundAction(); } $data = $this->entityManager->getRepository(Entite::class)->findAll(); $jsonData = []; $idx = 0; foreach($data as $sampledata) { $temp = [ 'id' => $sampledata->getId(), 'nom' => $sampledata->getNom(), 'adresse' => $sampledata->getAdresse(), ]; $jsonData[$idx++] = $temp; } $view = new JsonModel($jsonData); $view->setTerminal(true); return $view; }
D'autre part si tu fais du MVC, ta logique devrait migrer dans un service ce qui rendra à ton contrôleur sa seule responsabilité de gérer la requête et la réponse.
Donc je ferais un truc dans ce style pour ton controleur :
[lang=php] $request = $this->getRequest(); if (! $request->isXmlHttpRequest()) { return $this->notFoundAction(); } $jsonData = $this->myService->getDatas(); // et ici tu migres toute ta logique de récupération de datas, c'est son service. $view = new JsonModel($jsonData); $view->setTerminal(true); return $view;
Ta variable $query est aussi inutilisé dans l'exemple.
Enfin, via un console.log en front, via les web developper tools des navigateurs tu serais à même de comprendre tes erreurs
Hors ligne
Bonjour mes amis,
Malqre la prise en compte de tous vos commentaires, mon probleme existe toujours.
en consequence, je me demande est-ce qu'il n'est pas possible pour que l'API isXmlHttpRequest n'est pas active ? parceque avant ca marchait normalement ? brusquement je vois que tout a ete plante. et jusqu'a present aucune solution n'est trouvee.
Donc, je vous demanderais de partager avec moi cette idee.
Merci d'avance,
Gabriel
Hors ligne
Bonjour !
Il faudrait voir ce que te disent les developer tools de ton navigateur...
A quelle moment ça plante ? Quelle est la requête faite en ajax (au niveau network de tes outils de dev) ?
Hors ligne