2016-04-19 10 views
1

ライブ検索が必要です(ユーザーが入力中にJS/Ajaxを介して結果を表示する)。これはこれまでに書いたコードです。JSとキーアップを使ったRails 4のライブ検索

application.js

$(function() { 
    $("#email_search input").keyup(function() { 
    $.get($("#email_search").attr("action"), $("#email_search").serialize(), null, "script"); 
return false; 
    }); 
}); 

_email.html.erb部分

<%= form_tag emails_path, :method => 'get', remote: true, :id => "email_search" do %> 

    <%= text_field_tag :search, params[:search], :placeholder => 'Search From, Subject, or Body, Hit Enter To Search', :class => 'form-control' %> 

<% end %> 

index.html.erb

<div id="emails"> 
    <%= render "emails" %> 
</div> 

<script> 
    $(function() { 
    setInterval(function(){ 
     $.getScript("/emails") 
    }, 30000); 
    }); 
</script> 

index.js.erb

$("#emails").html("<%= escape_javascript render("emails") %>"); 

emails_controller.rb

respond_to :html, :js 
    def index 
    @emails = current_user.emails.search(params[:search]).order("created_at DESC") 
    end 

email.rb(検索方法)

def self.search(search) 
    if search 
     where('from_email ILIKE ? OR subject ILIKE ? OR body ILIKE ?', "%#{search}%", "%#{search}%", "%#{search}%") 
    else 
     all 
    end 
    end 

は、だからここに何が起こっているのです。私は1-2の文字を入力することができますし、結果をプルアップしますが、それはその後、それはJSのちょうど屋台のようなものです。私は新しいメッセージをポーリングするためにsetIntervalタイマーを無効にしましたが、動作していません。 4.2.xシリーズにはない古いバージョンのRailsではこれがうまくいくので、これは本当にイライラしています。

これはターボの問題ですか?あるいは私のJSを別の方法で書く必要がありますか? jquery-turbolinksもインストールされていますが、いずれにも違いはありません。

ご協力いただきまして誠にありがとうございます。

答えて

0

スニペットからは分かりにくいですが、インデックスページの置き換えられた部分にフォームを配置していたのと同じ問題がありました。したがって、私のフォームは、AJAXが処理するまでの間、いくつかの文字を受け取り、その後、結果(私のフォームを含む)を部分的に置き換えます。それは「ストールする」だろう。私のフォームを交換可能な領域の外に移動すると、それが固定されました。

これはちょうど私のばかげたミスだったかもしれません。それは簡単に修正されました。しかし、私はそれに言及すると思った。

+0

私は古い投稿を見つけてうれしく思っていますが、Rails 5.1.3アプリで同様の問題が発生し、検索フォームのJS負荷を無くして解決しました。 – nulltek

関連する問題