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

jQuery Discussion :

Optimisation code ajax [AJAX]


Sujet :

jQuery

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Expert technique
    Inscrit en
    Septembre 2003
    Messages
    328
    Détails du profil
    Informations personnelles :
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert technique

    Informations forums :
    Inscription : Septembre 2003
    Messages : 328
    Par défaut Optimisation code ajax
    Bonjour,

    je suis en train de m'auto former sur ajax et jquery et j'ai besoin d'aide pour arriver à automatiser mon code. Voilà, j'ai un menu avec des liens de ce type:
    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <p><a href="#" id="monsuperidunique">item1</a></p>
    <p><a href="#" id="monsuperidunique1">item2</a></p>
    <p><a href="#" id="monsuperidunique2">item3</a></p>

    Quand je clique sur un des liens je veux ouvrir la page demandée dans une div de la page principale, ce qui aura pour effet de ne pas reloader toute la page. Jusqu'ici, tout va bien. j'ai mis ceci dans mon code ajax:
    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() {
      // action sur le clique du lien item1
            $('#monsuperidunique').click(
                    function() {
                            $.ajax({
                                    url: "item1.php",
                                    cache: false,
                                    success:
                                            function(ret) {
                                                    $("#main").html(ret);
                                    },
                                    statusCode: {
                                            404: function() {
                                                    alert("page not found");
                                            }
                                    }
                            });
                    }
            );
    });
    Et j'ai répété ce bloc autant de fois que j'ai de page à ouvrir à partir du menu. Je voudrai savoir s'il est possible de rendre dynamique la partie "$('#monsuperidunique').click(" et "url: "item1.php"," pour passer ces valeurs en paramètre et donc n'avoir qu'une seule fonction pour toutes les pages.

    parce que c'est bien pour le moment. Ca fonctionne, mais bon, ce n'est pas beau quoi ...

    J'espère que vous pourrez m'aider.

  2. #2
    Rédacteur

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Gironde (Aquitaine)

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

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Billets dans le blog
    20
    Par défaut
    Tu as deux possibilités.
    Soit donner une classe unique pour chaque lien et l'utiliser dans le sélecteur lié à .click().
    Soit utiliser un conteneur global pour tes liens et utiliser la délégation d'événement.

    Dans les deux cas, au lieu de mettre une ancre vide comme cible du lien, mets la page à appeler (pour pouvoir la récupérer pour l'appel AJAX) en inhibant le comportement par défaut du lien (event.preventDefault()).
    Pas de question technique par MP !
    Tout le monde peut participer à developpez.com, vous avez une idée, contactez-moi !
    Mes formations video2brain : La formation complète sur JavaScriptJavaScript et le DOM par la pratiquePHP 5 et MySQL : les fondamentaux
    Mon livre sur jQuery
    Module Firefox / Chrome d'intégration de JSFiddle et CodePen sur le forum

  3. #3
    Membre éclairé
    Profil pro
    Expert technique
    Inscrit en
    Septembre 2003
    Messages
    328
    Détails du profil
    Informations personnelles :
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert technique

    Informations forums :
    Inscription : Septembre 2003
    Messages : 328
    Par défaut
    euhhh, ok. je n'ai pas tout compris, mais ça me donne un début de piste.
    Je vais aller me documenter un peu sur jquery par rapport à la délégation d’événements.

    Mais surtout, si quelqu'un a une petit exemple à me filer, je suis preneur

  4. #4
    Membre éclairé
    Profil pro
    Expert technique
    Inscrit en
    Septembre 2003
    Messages
    328
    Détails du profil
    Informations personnelles :
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert technique

    Informations forums :
    Inscription : Septembre 2003
    Messages : 328
    Par défaut
    Hello,

    alors j'ai lu pas mal de chose depuis hier et j'ai la tête à l'envers
    J'ai maintenant quelque chose de presque fonctionnel.

    J'ai modifié mon menu de la sorte:
    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <p><a href="page1.php" id="monsuperidunique" class="item">item1</a></p>
    <p><a href="page2.php" id="monsuperidunique1" class="item">item2</a></p>
    <p><a href="page3.php" id="monsuperidunique2" class="item">item3</a></p>

    Et je n'ai plus qu'une seule fonction:
    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
    $('.item').click(function(event) {
        event.preventDefault();
        url = $(this).attr('href');
        alert(url);
        $.ajax({
            url: url,
            cache: false,
            success: function(ret) {
                $("#main").html(ret);
            },
            statusCode: {
                404: function() {
                    alert("page not found");
                }
            }
        });
    });
    L'attribut href est bien récupéré par la fonction. Par contre, j'ai un double appel à la fonction quand je clique sur le lien. Le premier renvoi bien le bon href, et le second renvoi "undefined", et je ne comprends pas pourquoi. Une petite idée ?

    Merci de votre aide

  5. #5
    Membre éclairé
    Profil pro
    Expert technique
    Inscrit en
    Septembre 2003
    Messages
    328
    Détails du profil
    Informations personnelles :
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert technique

    Informations forums :
    Inscription : Septembre 2003
    Messages : 328
    Par défaut
    oupppssss. Je n'ai pas fait gaffe. J'avais déjà une autre balise qui utilise la même classe dans mon code. J'ai remplacé par "menuItem", et voilà. ça marche.

    merci pour toutttttt

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Optimisation code pour gagner en rapidité
    Par polodu84 dans le forum MATLAB
    Réponses: 2
    Dernier message: 05/03/2008, 15h32
  2. Réponses: 13
    Dernier message: 22/02/2008, 18h55
  3. Optimiser code VBA
    Par willytito dans le forum VBA Access
    Réponses: 5
    Dernier message: 19/11/2007, 09h49
  4. [AJAX] code ajax
    Par trazomtg dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 24/09/2007, 16h41

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