Rails:使用Ajax填充Jquery自动完成

时间:2015-12-09 06:20:06

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

我一直在这个地方插入不同的东西到这个过程中,我仍然没有得到任何结果。

有时我会得到臭名昭着的额外“<”错误,有时绝对没有任何反应,我不确定这是否是问题,但我认为谷歌开发人员正在显示当前页面是作为我要求的json文件而不是我发送的json发送的(见后面)。这是我在谷歌开发者看到的: enter image description here 这绝对不是我的json文件: enter image description here 无论如何,这是我的javascript:

$('#q_name_cont').autocomplete({
url: "autocomplete/items",
dataType: 'json'
});

这是我的路线:

get 'autocomplete/items' => 'home#autocomplete_items', :defaults=>{:format=>'json'}

控制器动作(注释掉部分是我尝试了一段时间的另一种方法):

def autocomplete_items
  # respond_to do |format|
  # format.js {render 'autocomplete_items'}
@products = Item.all.order(:name)
respond_to do |format|
  format.html
  format.json { 
    render json: @products.map {|item| item.name}
  }
end
end

在我使用映射之前,我正在使用此视图进行渲染:

{
"items": [
<%Item.all.each do |i|%>
    { "<%=i.name%>","<%=i.name%>" },
<%#end%>
    { "value": "",        "data": "" }
]
}

我真的到处都是,尝试了很长时间才能让它发挥作用。我错过了什么?

1 个答案:

答案 0 :(得分:0)

IIRC,您的urldataType选项在自动填充文档中不存在。您可以尝试使用source选项:

$('#q_name_cont').autocomplete({
  source: function (request, response) {
    $.ajax({
      url: "/autocomplete/items", // should be with '/'
      dataType: 'json',
      data: { query: request.term },
      success: function(data) {
        // call response to return the result to autocomplete box
        response(data);
      }
    });
  }
});

当然,这只是为了显示所有项目,如果你想像真正的自动完成框那样过滤,你应该修改控制器来根据查询过滤结果:

def autocomplete_items
  @products = Item.all.order(:name)
  respond_to do |format|
    format.html
    format.json { 
      render json: @products
                      .where('name ILIKE ?', "%#{params[:query]}%")
                      .pluck(:name)
    }
  end
end