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 :

Pagination Ajax non intrusive


Sujet :

jQuery

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    92
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 92
    Par défaut Pagination Ajax non intrusive
    Bonjour,

    J'essaie de mettre une pagination Ajax non intrusive en place à l'aide jQuery, mais j'ai quelques petits problèmes.

    Pour l'instant j'ai tout bêtement "bindé" un événement (à l'aide d'une classe) sur mes boutons de pagination sans toucher du tout au comportement d'origine, ce qui m'assure que les moteurs de recherche ou les utilisateurs sans javascript pourront quand même parcourir les pages.

    Voilà l'idée :

    HTML :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    <div class="paginationControl paginate-ax">
          <span class="disabled">&laquo; Préc.</span>
          <span class="active">1</span>
          <a href="/photos?p=2">2</a>
          <a href="/photos?p=3">3</a>
          <a href="/photos?p=4">4</a>
          <a href="/photos?p=5">5</a>                      
          <a class="pagination-next" href="/photos?p=2">Suiv. &raquo;</a>
    </div>
    Javascript :
    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
    21
    22
    23
     
    var function = paginateAjax(target) {
        $('.paginate-ax a').click(function(e) {
            var link = $(this);		
            $.scrollTo('#view-title', {duration: 100});
            $.bbq.pushState({'p' : $.deparam.querystring(link.attr('href')).p}, 2);
            $.ajax({
                url: link.attr('href'),
                cache: true,
                dataType: "html",
                beforeSend: function(xmlHttpRequest) {				
    	        $('#page-items').empty();
    	        $('#page-items').addClass('loading');
    	    },
                success: function(data) {
                    ('#page-items').removeClass('loading');
                    target.html(data);
                    paginateAjax(target);
    	    }
            });
            e.preventDefault();
        });
    };
    C'est tout con, une fois le DOM chargé, j'invoque une première fois la fonction paginateAjax(), le paramètre target étant l'élément html qui recevra le contenu de la réponse ajax.

    Je surcharge donc l'événement click sur les liens de la pagination, et j'ajoute dans le hash de l'url un paramètre #p=numero_de_page qui est sensé me permettre d'afficher la bonne page si l'utilisateur saisi directement l'url dans son navigateur (ou fait précédent, ou un bookmark, etc.).

    Tout con, mais ça me pose des problèmes. Le pb c'est que dans le cas où l'utilisateur revient sur une url avec le hash #p, je ne peux pas le savoir côté serveur, la requête va donc se faire, et se re-faire une deuxième fois quand le javascript va détecter le hash et invoquer une requête ajax.

    A partir de là, je ne sais pas vraiment comment faire une pagination ajax non intrusive, parce qu'il faudrait que la page soit appelé seulement une fois le dom chargé pour pas que la requête soit effectuée 2x sur le serveur.

    Si vous avez des idées ? ou une expérience sur le sujet


    Merci.

    A+ benjamin.

  2. #2
    Rédacteur

    Avatar de danielhagnoul
    Homme Profil pro
    Étudiant perpétuel
    Inscrit en
    Février 2009
    Messages
    6 389
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant perpétuel
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2009
    Messages : 6 389
    Billets dans le blog
    125
    Par défaut
    Bonsoir.

    Il manque un $ :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    success: function(data) {
    	$('#page-items').removeClass('loading');
    	target.html(data);
    	paginateAjax(target);
    }

    Blog

    Sans l'analyse et la conception, la programmation est l'art d'ajouter des bogues à un fichier texte vide.
    (Louis Srygley : Without requirements or design, programming is the art of adding bugs to an empty text file.)

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    92
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 92
    Par défaut
    C'est une erreur de frappe...

Discussions similaires

  1. Données venant d'ajax non postées
    Par senacle dans le forum Langage
    Réponses: 12
    Dernier message: 31/12/2008, 16h12
  2. [Prototype] IE7 : Requête AJAX non effectuée
    Par air_v dans le forum Bibliothèques & Frameworks
    Réponses: 1
    Dernier message: 21/01/2008, 10h38

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