Bonjour,

J'aurai besoin de votre aide.

J'ai une barre de menu avec une icône. Quand on clique dessus, cela affiche des notifications.
Dans mon code, je détecte si il y a ou non des résultats (Des notifications), si oui, j'affiche un petit point vert clignotant sur l'icône pour informer l'utilisateur qu'il y a une notification.

Mais si je crée une notification, il faut rafraichir la page pour qu'elle apparaisse.
J'aimerai donc mettre en place cela en Ajax mais je n'es rien trouvé qui puisse m'aider.

Si vous avez besoin du code que j'ai déjà fais, dites le moi.

En espérant obtenir de l'aide de votre part.

Merci !

2 réponses


Piverte
Réponse acceptée

Je ne sais pas si ce que je fais est la meilleure des solutions, en tout cas ça marche plutôt bien. Voici la démarche que je suis :

Dans une feuille javascript

//event qui se déclenche quand tu appuies sur ton bouton
$('.ajaxInput').click(function() {
    //2 formats possible pour l'envoi des données
    //data: { name: "John", location: "Boston" } (= format JSON)
    //data: "name=John&location=Boston"
    var data; //a toi de récupérer les valeurs où tu veux
    var url = $(window.location).attr('href');
        //si tu veux éviter d'avoir de multiples requêtes en parallèle tu arrêtes la requête précédente avec cette ligne
        //ça évite les problèmes si quelqu'un clique comme un bourrin sur le bouton
        if(xhr) xhr.abort();
        //requete ajax
        xhr = $.ajax({
            type: "POST",
            url: url,
            data: data,
              success: function(responseFromServer, textstatus, jqXHR) {
                 //ici tu remplaces ajaxOutput par la balise dans lequel se trouve ton voyant, c'est là que va s'afficher ton voyant
                 $('.ajaxOutput').html(responseFromServer);
              }
        });

Une fois que tu as ce code le traitement dans ton controller va s'effectuer.

MonController.php

//dans le before filter on supprime l'affichage du layout par défaut cela permet de rafraichir un seul élément de ta page au lieu de tout rafraichir
public function beforeFilter(){
        parent::beforeFilter();
        if($this->request->is('ajax'))
            $this->layout = null;
    }
public function laFonctionCorrespondantALaPageEnCours(){
    //if permettant de faire un traitement spécifique suite à ta requête ajax
    if($this->request->is('ajax'){
        //traitement qui correspond à ta requete, this->request->data contient tes data
        //genre $color = vert ou $color = rouge et $this->set(compact('color'));
        //puis renvoie de l'élement que tu veux rafraichir
        $this->render('/Elements/tonIconelumineux');
    }
}

J'espère que cela t'aidera !

Bon courage :)

DexX
Auteur

Merci Piverte ! :)