2010-03-27 3 views
3

J'utilise will_paginate pour parcourir les enregistrements avec succès. J'utilise également la recherche en direct AJAX via jQuery pour mettre à jour mes résultats div. Pas de problème jusqu'à présent. Le problème que j'ai est lorsque vous essayez de paginer à travers ces résultats de recherche en direct. Je reçois simplement "La page est en cours de chargement ..." sans mise à jour div. Est-ce que je manque quelque chose de fondamental? Je crois que je pourrais avoir besoin de lier l'évènement click des liens de pagination via jQuery.Utilisation de will_paginate avec AJAX live search avec jQuery dans Rails

# index.html.erb 

    <form id="searchform" accept-charset="utf-8" method="get" action="/search"> 
    Search: <input id="search" name="search" type="text" autocomplete="off" title="Search location, company, description..." />  
    <%= image_tag("spinner.gif", :id => "spinner", :style =>"display: none;") %> 
    </form> 

# JobsController#search 

def search 
    if params[:search].nil? 
     @jobs = Job.paginate :page => params[:page], :order => "created_at desc" 
    elsif params[:search] and request.xhr? 
     @jobs = Job.search params[:search], params[:page] 
    end 
    render :partial => "jobs", :layout => false, :locals => { :jobs => @jobs } 
    end 

# Job#search 

def self.search(search, page) 
    logger.debug "Job.paginate #{search}, #{page}" 
    paginate :per_page => @@per_page, :page => page, 
      :conditions => ["description LIKE ? or title LIKE ? or company LIKE ?", 
       "%#{search}%", "%#{search}%", "%#{search}%"], 
       :order => 'created_at DESC' 
    end 

# search.js 

$(document).ready(function(){ 

    $("#search").keyup(function() { 
    $("#spinner").show(); // show the spinner 
    var form = $(this).parents("form"); // grab the form wrapping the search bar. 
    var url = form.attr("action"); // grab the URL from the form's action value. 
    var formData = form.serialize(); // grab the data in the form 
    $.get(url, formData, function(html) { // perform an AJAX get, the trailing function is what happens on successful get. 
     $("#spinner").hide(); // hide the spinner 
     $("#jobs").html(html); // replace the "results" div with the result of action taken 
    }); 
    }); 

}); 
+0

Aussi, juste curieux de savoir pourquoi vous ne disposez pas d'un retard dans la fonction keyup? Typiquement, vous voulez que la recherche en direct attende que l'utilisateur fasse une pause de quelques centaines de millisecondes avant de lancer le get, non? –

Répondre

0

Si la fileuse ne se cache, très probablement la demande de /search a échoué - vérifiez votre log/development.log. Il semble que vous voudrez peut-être par défaut le paramètre :page si elle n'est pas fourni:

page = params[:page] || 1