Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Bonsoir,
Je viens vers vous car je suis actuellement bloqué sur l'utilisation d'ajax avec zf2.
Pour plus de facilité, j'ai crée un module de test (appelé ajax) qui ne contient qu'un controller, un formulaire et une page index.phtml
L'objectif tout simple: lorsque je tape du texte dans un champ du formulaire, je veux faire apparaître un pop up montrant que il y a bien eu un événement. Bien-sur ce n'est pas l'objectif final ^^ c'est juste pour simplifier au maximum et réduire les erreurs. je pense que cela facilite le debeugage.
voici mon code du js (ajax.js) :
$(document).ready(function(){ $(".test").on("keyup",function(event){ //quand on entre du texte dans le champ 'test' $.ajax({ url: '/ajax/index', // j'appaelle la fonction index du controller ajax type: 'POST', dataType: 'json', async: true, data: $(".test").serialize(), success: function(data, status) { alert('je suis ici'); // j'affiche le pop up }, error : function(xhr, textStatus, errorThrown) { if (xhr.status === 0) { alert('Not connected. Verify Network.'); } else if (xhr.status == 404) { alert('Requested page not found. [404]'); } else if (xhr.status == 500) { alert('Server Error [500].'); } else if (errorThrown === 'parsererror') { alert('Requested JSON parse failed.'); } else if (errorThrown === 'timeout') { alert('Time out error.'); } else if (errorThrown === 'abort') { alert('Ajax request aborted.'); } else { alert('Remote sever unavailable. Please try later'); } } }); }); });
ensuite mon controller AjaxController
[lang=php]namespace Ajax\Controller; use Zend\Mvc\Controller\AbstractActionController; use Zend\View\Model\ViewModel; use Zend\View\Model\JsonModel; use Zend\View\Renderer\PhpRenderer; use Ajax\Form\AjaxForm; use Ajax\Model\Ajax; class AjaxController extends AbstractActionController { public function indexAction() { // Permet d'ajouter le script $renderer = $this->serviceLocator->get('Zend\View\Renderer\RendererInterface'); $renderer->headScript()->appendFile('/js/ajax.js'); $form = new AjaxForm(); $request = $this->getRequest(); return array( 'form' => $form, ); } //ma fonction public function testAction() { $request = $this->getRequest(); if ($request->isXmlHttpRequest()) { $retour ="azerty"; // pour le test if (empty( $errorArray)) { $view = new JsonModel(array( 'retour' =>$retour,//j'envoi la variable $retour 'success'=>true, )); } else { $view = new JsonModel( $errorArray); } $view->setTerminal(true); } return($view); } }
j'utilise firebug pour m'aider mais la il ne m'aide pas vraiment lol
message d'erreur :
- POST http://zf2-tutorial.localhost/ajax/index jquery.min.js (ligne 8625)
donc ca m'aide pas beaucoup
la ligne 8625 de jquery.min.js :
try { // Do send the request (this may raise an exception) xhr.send( options.hasContent && options.data || null ); } catch ( e ) { // #14683: Only rethrow if this hasn't been notified as an error yet if ( callback ) { throw e; } }
je ne voit pas du tout d'ou vient l'erreur
je vous rajoute une image de firebug
Si qq1 à une idée je suis preneur.
Hors ligne
Salut, désolé mais là on a rien comme info. Sans avoir d'erreurs ou autre on peut pas t'aider. C'est comme quand tu vas chez le garagiste et tu lui dis que ta voiture marche pas mais tu lui donnes pas les clés et il doit se démerder :p.
Déjà pour le JsonModel tu n'as pas besoin du setTerminal, tu dois activer le ViewJsonStrategy pour retourner du json. Là t'as plus un problème ajax lié à JQuery qu'autre chose. Et en debug on utilise pas les versions minifiés des lib JS ça permet de pouvoir faire du debug.
Hors ligne
Bonjour bonjour
Effectivement ton erreur viens de l'ajax, ta partie zf2 à l'air correcte.
Tu devrais mettre ton $.ajax en async : false. Car si un utilisateur tape trop vite, ton script risque de partir en cacahuète
Sinon j'essairai un complete : alerte ok, plutôt qu'un success.
et pour finaliser, je vérifierai la variable $(".test").serialize() (vu qu'apperement JQuery n'arrive pas à envoyer ton data).
Voila voila, si jamais tu à plus de précisions n'hésite pas
Dernière modification par flobrflo (23-01-2015 09:23:25)
Hors ligne
Merci pour ces réponses !
Tout d'abord: Orkin je veux bien donner des erreur mais je n'ai rien à donner ^^ et je n'utilise pas la version minifié de jquery, le nom du fichier je te l'accorde laisse penser que je l'utilise, mais je n'aurai pas pu te sortir la ligne 8625 sinon
Je vais essayer le ViewJsonStraegy. Ce que je ne comprend pas c'est que j'ai déja utilisé ce script auparavant, et cela fonctionnait nickel.
Flobrflo merci pour tes conseils, j'ai essayé de mettre ca en place, mais pas de résultat pour le moment.
Hors ligne