Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 23-12-2008 22:56:10

NoBoDy
Nouveau membre
Date d'inscription: 20-03-2007
Messages: 3

Effectuer des operations sur vue initiale apres requete ajax

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

Code:

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";
  }

Code:

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

 

#2 24-12-2008 09:32:33

Roulio
Membre
Lieu: Alsace
Date d'inscription: 20-11-2007
Messages: 137
Site web

Re: Effectuer des operations sur vue initiale apres requete ajax

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 :

Code:

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) :

Code:

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

 

Pied de page des forums

Propulsé par PunBB
© Copyright 2002–2005 Rickard Andersson
Traduction par punbb.fr

Graphisme réalisé par l'agence Rodolphe Eveilleau
Développement par Kitpages