我有一个需要实时搜索的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,但它没有任何区别。
非常感谢任何帮助。
答案 0 :(得分:0)
这里很难从片段中分辨出来,但我有一个类似的问题,我将表单放在索引页面的替换部分中。因此,我的表单将接受几个字符,直到AJAX有时间处理,然后它将用部分替换结果(包括我的表单)。它会停滞不前。&#34;在可更换区域外移动我的表格会修复它。
这可能只是我的愚蠢错误;它很容易修复。但我以为我提到了它。