我一直在这个地方插入不同的东西到这个过程中,我仍然没有得到任何结果。
有时我会得到臭名昭着的额外“<”错误,有时绝对没有任何反应,我不确定这是否是问题,但我认为谷歌开发人员正在显示当前页面是作为我要求的json文件而不是我发送的json发送的(见后面)。这是我在谷歌开发者看到的: 这绝对不是我的json文件: 无论如何,这是我的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": "" }
]
}
我真的到处都是,尝试了很长时间才能让它发挥作用。我错过了什么?
答案 0 :(得分:0)
IIRC,您的url
和dataType
选项在自动填充文档中不存在。您可以尝试使用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