Rails Ajax表单没有响应

时间:2016-02-20 18:20:05

标签: javascript jquery ruby-on-rails ajax forms

目前我在我的应用程序中使用pg搜索gem。搜索功能正常。但是,现在我想为我的表单应用ajax。问题是在我输入搜索查询后,表单根本没有显示任何结果。我不知道我哪里弄错了。你们能不能真实地看看我的代码:

search.haml

.row
  %h1.text-center Tìm Giảng Viên
  #teacher_lookup
    = form_tag search_teachers_path, :id => 'custom-search-input', method: :get, class: "input-group col-md-12", role: "search", remote: true do
      .input-group
        = text_field_tag :search,
              params[:search], class: "search-query form-control", placeholder: "Tên giảng viên, ví dụ: Nguyễn Văn A"
        %span.input-group-btn
          = button_tag( :class => "btn btn-danger") do
            .search-size
              %span.glyphicon.glyphicon-search

= @teachers.each do |teacher|
  = link_to teacher, school_teacher_url(teacher.school_id, teacher)
  Khoa
  = teacher.department |
  ,
  = link_to teacher.school.name, school_path(teacher.school_id)
  %br/

teachers.js

var search_teacher;
search_teacher = function () {
   $('#custom-search-input') .on('ajax:success', function (event, data, status) {
      $('#teacher_lookup').replaceWith(data);
      search_teacher();
   });
}

$(document).ready(function () {
  search_teacher();
});

1 个答案:

答案 0 :(得分:0)

更好的尝试:   - 构建一个API,它接受一个搜索参数并以JSON格式返回教师。   - 构建一个JS函数,该函数使用$ .getJSON调用此API   - 在getJSON回调中,您可以将教师附加到HTML

您仍然可以使用表单,但必须使用自定义查询覆盖提交功能。

其他可能性: 使用标准的rails ajax并在views / * / search_teachers.js.erb中做你的东西

以下是一些没有rails内置视图的代码片段。从我们目前的一个项目中被盗:

我们需要一些东西:   - 铁路线   - 一个rails控制器,它以json格式进行搜索查询(以你想要的任何方式)和响应   - 在你的前端,我们在某个地方有一个带有按钮的HTML表单,触发了一个“负载”。功能   - “负载”#39;函数进行ajax调用并重新呈现列表

# routes.rb
get '/my_search_route', to: 'search#query', as: :search_query

然后rails控制器处理路径

#app/controllers/search_controller.rb
class SearchController < ApplicationController

  # method to search after something (e.g. a model named 'Customer')
  def query
    if !params[:q].nil?
      render :json => Customer.where("name ilike :q", q: "#{params[:q]}%") # put this logic into your model
    else
      render :json => [] # not absulutly sure if this is correct syntax
    end
  end
end

在你的某些erb文件的前端,你有你的表格。我用一个输入字段做一个简单的例子来说清楚:

<!-- app/views/whatever/some_file.html.erb -->
<!-- Input field to search --> 
<input type="search" name="search" id="search" placeholder="Search..." />

<!-- HTML list to display your results --> 
<ul id="searchResults"></ul>

<!-- Skript to call the 'load'-function, when user types something --> 
<script>
  $('#search').keyup(function(){
    query = $('#search').val();
    loadData(query);
  });
</script>

在您的资产中,您需要一个包含在资产管道中的javascript文件,我们可以在其中存储加载函数。

// app/assets/javascripts/search_functionality.js
// loadData calls the backend
function loadData(query){
  var params = {};
  params['q'] = query;

  // ajax call
  $.get("/my_search_route", params ).done(function( data ) {
    for (var i = 0; i < data.length; i++) {
       $("#searchResults").append('<li>' + data[i].name + '</li>');
    }
   });
}

这只是如何进行往返的一个例子。在我们的项目中,我们在这些内容中有更多的逻辑,但我认为主要部分应该是清楚的。某处有一些html和js。使用js,您可以对服务器进行ajax调用以获取数据。服务器需要一个路径和控制器,在给定的参数后搜索。如果您遇到问题,请在javascript中使用console.log或在rails侧使用/ debugger