使用JS和Keyup

时间:2016-04-19 15:33:54

标签: javascript ruby ajax ruby-on-rails-4

我有一个需要实时搜索的rails应用程序(在用户输入时通过JS / Ajax显示结果)。这是我到目前为止编写的代码。

的application.js

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

_email.html.erb partial

<%= 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计时器来轮询新消息并且它无法正常工作。这真的令人沮丧,因为这适用于旧版本的Rails,而不是4.2.x系列。

这是一个涡轮问题吗?或者我需要以不同的方式编写我的JS?我也安装了jquery-turbolinks,但它没有任何区别。

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

这里很难从片段中分辨出来,但我有一个类似的问题,我将表单放在索引页面的替换部分中。因此,我的表单将接受几个字符,直到AJAX有时间处理,然后它将用部分替换结果(包括我的表单)。它会停滞不前。&#34;在可更换区域外移动我的表格会修复它。

这可能只是我的愚蠢错误;它很容易修复。但我以为我提到了它。