Bonjour,

Je cherche à faire fonctionner de l'Ajax avec le MVC de grafikart, bon dans l'ensemble j'ai réussi mais j'ai un autre soucis que je n'avais pas avant.

En fait, je me sers de l'Ajax pour faire un petit effet de suppression des articles ou pages, avant de faire l'appel à cette fonction, je fais un onclick="return confirm" dans mon lien, sauf que lorsque je mets annuler, ma fonction ajax s'effectue quand même.

J'ai avant testé avec une action admin_deleteajax dans mon controller Post, et là tout fonctionnait sauf que j'ai voulu pousser le bouchon plus loin. J'ai rajouté dans mon objet Request, une méthode isAjax() qui me renvois si la page a été appellé en ajax, je me sers de cette fonction dans le fichier hook, qui mettra le layout à null et initialisera une variable ajax dans mon objet request en cas d'appel Ajax.De cette manière, exit admin_deleteajax mais admin_delete où il me suffit juste de vérifier si $this->request->ajax vaut true pour faire le traitement nécessaire.

Voici mon code, au passage ma méthode est elle bonne? je me suis inspiré du tuto de graf sur l'Ajax avec Cake

Layout admin :
//code standard

<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.6.2/jquery.min.js"></script>
    <script type="text/javascript" src="<?php echo Router::url('js/jquery.color.js'); ?>"></script>
    <script type="text/javascript">
    $(function(){
        $('.linkDeleteAjax').click(function(){
            id = $(this).parent('td').parent('tr').children('td:nth-child(1)').text();

            $("#post_"+id).css({
                'backgroundImage': 'none',
                'backgroundColor': 'white',
            });

            $("#post_"+id).animate({
                'backgroundColor': '#ff8888',
                'color': '#941010'
                }, 
                1000
            );
            $.get("<?php echo Router::url('admin/posts/delete/'); ?>", {
                id:id
                },

                function(data){
                    $("#post_"+id).fadeTo("slow", 0, function(){
                        $(this).hide();
                    });
                    var totalPost = $('#totalPost').text()-1;
                    $('#totalPost').text(totalPost);    
                }
            );  
            return false; 
        });
    });
    </script>

admin_index.php

//lien supprimer
<a class="linkDeleteAjax" onclick="return confirm('Voulez vous vraiment supprimé ce contenu?');" href="<?php echo Router::url('admin/posts/delete/'.$post->id);?>">Supprimer</a>

admin_delete

public function admin_delete($id){
    if($this->request->ajax){
        $id = $_GET'id'];
    }
    $this->loadModel('Post');
    $this->Post->delete($id);
    if($this->request->ajax){
        return true;
    }
    $this->session->setFlash('Le contenu a bien été supprimé');
    $this->redirect('admin/posts');
}

isAjax() dans mon objet request

public function isAjax(){
    return isset($_SERVER'HTTP_X_REQUESTED_WITH']) && $_SERVER'HTTP_X_REQUESTED_WITH']=="XMLHttpRequest";
}

hook.php

if ($this->request->isAjax()){
    $this->layout = null;
    $this->request->ajax = true;
}

2 réponses


elscorto
Auteur
Réponse acceptée

C'est bon en fait, problème résolu, j'ai mis le confirm dans ma fonction js et tout roule impec

elscorto
Auteur

Problème non résolu en fait, cela l'a simplement déplacé pour la seconde suppression, donc je cherche toujours une solution du pourquoi mon return confirm n'est pas pris en compte

merci