【问题标题】:Data always empty AJAX call Rails 5数据总是空的 AJAX 调用 Rails 5
【发布时间】:2018-12-11 10:14:52
【问题描述】:

我是 RAILS 的新手,甚至是 AJAX 调用的新手。

我有一个搜索栏,我想在其中执行自动完成以帮助用户查找数据库中存在的项目。 目前我只是想在控制台内显示 AJAX 调用的数据,但无论我做什么总是空的......

我正在使用 Rails 5.2.1

我的表格:

<%= form_tag autocomplete_index_path,remote: true,  method: :get do %>
 <%= text_field_tag 'term', params[:term], class:"my_form"%>
  <%= submit_tag "bouton", class: "my_button" %>
<% end %>

我的控制器(使用 pg 搜索):

class AutocompleteController < ApplicationController
  def index
    respond_to do |format|
     format.json { render json: { data: Beer.search_beer(params[:term]).limit(5)}  } 
    end
  end
end

还有我的资产/javascripts 文件

$(document).ready(function(){

    $(".my_form").keyup(function(){
        var search = $(this).val();

        if(search != ""){

            $.ajax({
                url: 'autocomplete',
                method: 'GET',
                dataType: 'json',
                data: {'name': $("#term").val()},
                success:function(data){
                 console.log('Success!', data);
                }
                });
        }

    });

});

带有 pg 范围的啤酒模型

class Beer < ApplicationRecord
  include PgSearch
  belongs_to :brewery
  belongs_to :category
  belongs_to :style
  has_many :bars, through: :beer_lists
  pg_search_scope :search_beer, 
    against: :name, 
    using: {
      tsearch: {
        prefix: true
      }
    }
end

如果有人能帮我弄清楚为什么 Ajax 调用总是呈现一个空数组,那将不胜感激!

Console log

Rails server

【问题讨论】:

  • 您的 ajax 请求是否成功发送到您的控制器?请您先检查一下,然后添加您的 ajax 调用的终端日志
  • 是的,它已成功连接,因为我可以看到搜索是在 rails 控制台中执行的,但文本参数为空。我添加了浏览器和 Rails 控制台日志
  • 尝试添加终端日志(rails 服务器)而不是浏览器日志。
  • 这是因为你的params[:term]是空的所以没有结果。

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


【解决方案1】:

1) 您是否检查过params[:term] 实际上包含您输入的字符串?例如,通过在控制器中索引方法的开头添加binding.pry,并在终端控制台中检查binding.pry 停止代码时params[:term] 的值是多少?

2) 你的search_beer 方法是什么? 您是否尝试过在 Beer 模型中定义 pg 搜索范围,如下所述:https://github.com/Casecommons/pg_search#user-content-pg_search_scope? 然后你可以有一个search_by_name 方法(如果你的啤酒模型有一个name 属性),这样Beer.search_by_name(params[:term])返回一个啤酒数组,其名称与你在params[:term]中的名称匹配

【讨论】:

  • 我添加了 Beer 模型,让您看到 search_beer 方法。让我用 binding.pry 来检查 param[:terms] 的值
  • 正如你所说的 params[:term] 是 nil 但我真的不明白为什么它没有填充表单中输入的文本...
  • 在控制台中当你停在binding.pry点时你可以请求params的值,它包含什么?
  • 当我输入参数时,我有这个 {"name"=>"fg", "format"=>"json", "controller"=>"autocomplete", "action"=>"index "},没有文本字段的痕迹
  • 好的,这意味着 html 可能存在问题...如果您在浏览器中检查表单的 html,您有 &lt;input type="text" name="term" /&gt; 吗?
猜你喜欢
  • 2016-05-18
  • 2015-06-25
  • 1970-01-01
  • 2017-12-27
  • 1970-01-01
  • 1970-01-01
  • 2017-09-13
  • 2017-03-27
  • 2015-11-12
相关资源
最近更新 更多