Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Pages: 1
Bonsoir,
J'ai mis en place sur mon site un système pour poser des questions, le tout en ajax pour la sauvegarde de ces questions en base de données.
Si j'ai bien compris le principe, j'ai effectué comme ceci :
j'ai ma requete en ajax qui redirige vers une action avec un setNoRender(); afin de ne pas générer d'affichage.
Tout fonctionne à merveille ( pour la sauvegarde sans rechargement de la page), mais j'aimerai renvoyer à ma vue initiale, en l'occurrence celle avec mon block pour poser ma question un message indiquant que la question a bien été enregistré etc.
Je pensais donc dans la partie onSuccess de ma fonction ajax, modifié le javascript pour afficher ou non les informations adéquates, mais cela n'a aucun effet (comme par exemple un innerHTML).
Je me demande donc si je peux rediriger des informations vers une vue précise ou bien si vous avez une autre solution qui pourrait résoudre mon problème ?
voici l'action de ma vu qui traite la sauvegarde et ma fonction ajax
public function saveAction() { $this->_helper->viewRenderer->setNoRender(); $resultat = array(); if (!$this->_request->isPost()) return false; $subject = $this->_request->getPost('subject'); $message = $this->_request->getPost('message'); $exp = $this->_request->getPost('exp'); $dst = $this->_request->getPost('dst'); if(save_question_ext($exp,$subject,$message,$dst)) { $resultat += array("ok"=>"ok"); } $this->view->resultat = "ok"; }
function saveQuestion(subject, message, exp, dst) { new Ajax.Request("save", { method: 'post', parameters: {subject:subject, message:message, exp:exp, dst:dst}, onSuccess: function(transport) { var resultat = transport.responseText.evalJSON(); if (resultat.ok == "ok") { $("block-mail").style.display = "none"; // pour test mais ne fonctionne pas } $('title-mail').innerHTML = "Votre question a bien été enregistrée"; // pour test mais ne fonctionne pas } }); }
Dernière modification par NoBoDy (23-12-2008 22:56:58)
Hors ligne
Bonjour NoBoDy,
A priori, t'as méthode est la bonne. Cependant je n'utilise plus prototype mais jQuery donc es-tu sûr que cette syntaxe est la bonne ?
NoBoDy a écrit:
onSuccess: function(transport) {
var resultat = transport.responseText.evalJSON();
if (resultat.ok == "ok") {
...
}
}
Personnellement, pour un système de "sélection" d'annonce dans un panier, lorsque l'utilisateur clique sur "sauvegarder", j'appelle cette méthode :
if ($this->getRequest()->isXmlHttpRequest()) { Zend_Layout::getMvcInstance()->disableLayout(); } $selection = array(); if(isset($_COOKIE['produits'])) { $tPostes = new Postes(); foreach ($_COOKIE['produits'] as $id => $void) { $data = $tPostes->find($id)->toArray(); $selection[] = $data[0]; } } $this->view->selection = $selection;
j'ai toujours ma vue rendue automatiquement, mais je désactive le layout, ce qui renvoie un tableau formaté avec les différentes annonces sélectionnées/sauvegardées.
ensuite, le script jQuery récupère les infos et mets à jour le bloc (div#selection_content) :
success:function(data) { if(data) { $("#selection_content").hide('slow'); $("#selection_content").html(data); $("#selection_content").show('slow'); } },
En espérant t'avoir aidé.
a+ Julien
Hors ligne
Pages: 1