IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Zend_Acl & Zend_Auth PHP Discussion :

ACL et jQuery ajax


Sujet :

Zend_Acl & Zend_Auth PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    A la découverte de la POO
    Inscrit en
    Mai 2009
    Messages
    93
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : A la découverte de la POO

    Informations forums :
    Inscription : Mai 2009
    Messages : 93
    Par défaut ACL et jQuery ajax
    Bonjour à tous,
    j'ai une liste de dossiers que j'affiche et je voulais y mettre un peu de jQuery pour cloturer un dossier.
    en gros un simple click sur un cadenas qui effectue un update id_etat="2" where id_dossier = mon id récupéré .

    Mon problème consite à faire ceci en MVC ...
    voila comment j'ai procédé :

    Dans ma vue :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <a href="#" class="cloture" title="<?php echo $this->escape( $dossier['id_dossier'] ); ?>"><img src="<?php echo $this->baseUrl(); ?>/images/cad1.png" alt="Ouvert" title="Cloturer ce Dossier " /></a>


    l'image est bien la avec la bonne propriete.

    Le click sur l'image déclenche ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
     
    $(document).ready(function(){
        $('.cloture').click(
            function() {
            $.ajax({
                url : 'cloture_dossier.php',
                type: 'POST',
                data: 'id_dossier='+ $(this).attr('title'),
                dataType : 'json',
                success: function(data) {
                    alert('Dossier transmis : ' + data);  // cela fonctionne
                    },
                error: function (xhr, ajaxOptions, thrownError) {
                    alert(xhr.status);
                    alert(thrownError);
                  }
            })
        })
    });
    mon probleme réside indirectement dans cloture_dossier.php :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <?php
    $id_dossier=$_POST['id_dossier'];
     
    // $sql=("UPDATE dossiers SET id_etat= 2 WHERE id=$id_dossier");
     
    $dossiers = new Application_Model_DbTable_Dossiers();
    $dossiers->cloturerdossier($id_dossier);  // Modele ligne 62


    Dans mon modèle j'ai ajouté

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
        public function cloturerdossier ($id)
        {
        $data = array('id_etat' => '2');
            $this->update( $data, 'id = ' . (int)$id );
        }
    J'ai systématiquement une erreur 500 car j'utilise un plugin pour les acl :
    <h3>Parametres passés:</h3>
    <pre>array (
    'controller' =&gt; 'cloture_dossier.php',
    'action' =&gt; 'index',
    'module' =&gt; 'default',
    'id_dossier' =&gt; '117',
    ) </pre>

    hors dans mon fichier acl.ini je mets :
    controller.action = liste des profils autorisés séparés par une virgule

    si je ne mets rien, tout le monde y est autorisé, par exemple : index.index =

    Dans mon cas il reconnait cloture_dossier.php comme controller mais ce n'en n'est pas un et plante lamentablement

    Ai je loupé quelque chose ou c'est la logique globale qu'il faut revoir ?

  2. #2
    Membre confirmé
    Homme Profil pro
    A la découverte de la POO
    Inscrit en
    Mai 2009
    Messages
    93
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : A la découverte de la POO

    Informations forums :
    Inscription : Mai 2009
    Messages : 93
    Par défaut
    Je viens d'essayer autre chose :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    $(document).ready(function(){
    	$('.cloture').click(
    		function() {
    		$.ajax({
    			url : "/dossiers/cloturerdossier",
    			type: 'POST',
    			data: 'id_dossier='+ $(this).attr('title'),
    			dataType : 'json',
    			success: function(data) {
    				alert('Dossier transmis : ' + data);  // cela fonctionne
    				// $("#titre").html(data["0"]);
    				// $("#news").html(data["1"]);
    				},
    			error: function (xhr, ajaxOptions, thrownError) {
    				alert(xhr.status);
    				// alert(thrownError);
    			  }
    		})
    	})
    });
    et j'ai ajouté cette action dans mon controller dossiers :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    	public function cloturerdossierAction()
    	{
    	$dossiers = new Application_Model_DbTable_Dossiers();
    	$dossiers->cloturerdossier($id_dossier);  // Modele ligne 62
    	}
    j'ai bien ajouté ce qu'il faut dans mon acl.ini
    mais j'ai une erreur 404 car je n'ai pas de vue ... donc je ne pense pas que ce soit une solution viable pour de l'ajax ...

  3. #3
    Membre chevronné
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2012
    Messages
    328
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Cantal (Auvergne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2012
    Messages : 328
    Par défaut
    Il faut bien que ta requête reçoive une réponse, là tu reçoit bien la requête mais tu ne paramètre pas la réponse, il est donc naturel qu'il y ait une erreur 404

    Donc soit tu fais une vue exprès, soit tu paramètre la réponse dans ton contrôleur

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     $this->getHelper(‘json’)-> sendJson($reponse) ;
    Par exemple vu que tu as dit à ton jquery que la réponse est au format json

    Je te conseille vivement d'aller fouiller la doc pour déterminer exactement ce dont tu as besoin

    http://framework.zend.com/manual/1.1...onhelpers.json

  4. #4
    Membre confirmé
    Homme Profil pro
    A la découverte de la POO
    Inscrit en
    Mai 2009
    Messages
    93
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : A la découverte de la POO

    Informations forums :
    Inscription : Mai 2009
    Messages : 93
    Par défaut
    Citation Envoyé par v1cent Voir le message

    soit tu paramètre la réponse dans ton contrôleur

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     $this->getHelper(‘json’)-> sendJson($reponse) ;
    Je n'ai pas encore tout compris dans la doc
    j'ai rajouté dans mon action :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    	public function cloturerdossierAction()
    	{
    	$dossiers = new Application_Model_DbTable_Dossiers();
    	$dossiers->cloturerdossier($id_dossier);  // Modele ligne 62
    	$this->getHelper(‘json’)-> sendJson($dossiers) ;
    	}
    Mais cela ne change rien.
    En fait je ne veux pas une autre vue, je veux juste (dans un premier temps) executer une requete, puis, ce serait le luxe, modifier une image apres execution de cette requete.
    Requete de mon modèle :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
        public function cloturerdossier ($id)
        {
        $data = array('id_etat' => '2');
            $this->update( $data, 'id = ' . (int)$id );
        }

  5. #5
    Membre chevronné
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2012
    Messages
    328
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Cantal (Auvergne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2012
    Messages : 328
    Par défaut
    tu peux te contenter de renvoyer "0" ou "1"

    Il faut renvoyer quelque chose de toute façon pour que tu sache que ça a marché, donc soit tu envoi une chaîne de caractère vide, et une erreur HTTP en cas de problème d'enregistrement, soit tu envoie 0 ou 1 et tu traite le résultat

    en effet, le fait que tu n'ai pas d'erreur http (404,500 ou autre) ne signifie pas forcément que ton action a marché (enfin que les traitements associés à ton action ont marché)

  6. #6
    Membre confirmé
    Homme Profil pro
    A la découverte de la POO
    Inscrit en
    Mai 2009
    Messages
    93
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : A la découverte de la POO

    Informations forums :
    Inscription : Mai 2009
    Messages : 93
    Par défaut
    Citation Envoyé par v1cent Voir le message
    tu peux te contenter de renvoyer "0" ou "1"

    Il faut renvoyer quelque chose de toute façon pour que tu sache que ça a marché, donc soit tu envoi une chaîne de caractère vide, et une erreur HTTP en cas de problème d'enregistrement, soit tu envoie 0 ou 1 et tu traite le résultat

    en effet, le fait que tu n'ai pas d'erreur http (404,500 ou autre) ne signifie pas forcément que ton action a marché (enfin que les traitements associés à ton action ont marché)
    Mon probleme est que je n'arrive pas à executer ma requete ( je le vois bien dans ma base) avant meme de me préocuper du retour utilisateur.

    Je crois que je vais devoir revenir à du traditionnel car l'ajax et le mvc, c'est du chinois pour moi

Discussions similaires

  1. [JQuery] Ajax et bulle d'aide [ToolTip]
    Par Invité dans le forum jQuery
    Réponses: 1
    Dernier message: 04/07/2008, 10h18
  2. [JQuery] ajax avec Firefox
    Par elvan49 dans le forum jQuery
    Réponses: 2
    Dernier message: 17/12/2007, 12h21
  3. jquery ajax et IE
    Par Sourrisseau dans le forum jQuery
    Réponses: 1
    Dernier message: 01/09/2007, 05h17
  4. [JQuery] Ajax et réécriture d'url
    Par Nicolas N. dans le forum jQuery
    Réponses: 1
    Dernier message: 21/07/2007, 20h31

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo