【发布时间】:2020-02-08 15:51:06
【问题描述】:
我正在尝试实现 select2 搜索,以根据用户输入的数据动态生成结果。
当用户输入时,它应该发送一个 GET 请求到一个针对 ElasticSearch 运行查询的操作,然后 ElasticSearch 应该返回一些我可以转换成 JSON 的对象。
我没有看到 select2 搜索字段下方显示任何结果,尽管查询是针对 ElasticSearch 执行的,并且它正在根据用户数据返回结果。
仪表板控制器.rb
def card_search
if params[:query].present?
cards = Elasticsearch::Model.search(params[:query]).records.first(1)
hash = {}
hash["results"] = cards.map{|v| v.serializable_hash(only: [:name]) }
render json: hash.to_json
else
render json: []
end
end
dashboard.html.erb
$(".js-data-example-ajax").select2({
ajax: {
url: "/dashboard/card_search",
dataType: 'json',
type: "GET",
delay: 250,
data: function (term, page) {
return {
query: term,
page: page
};
},
formatResult: function (item) { return item.name; },
formatSelection: function (item) { return item.name; },
results: function (data, page) {
return data;
},
cache: true
},
placeholder: 'Search for a card',
minimumInputLength: 1,
});
参数从javascript成功传入控制器:
参数:{"query"=>"Charizard", "page"=>"1"}
ElasticSearch 生成结果数组并转换为 JSON:
"{\"结果\":[{\"name\":\"Charizard\"}]}"
当ElasticSearch返回一个数组,将JSON返回给AJAX调用时,会产生这个错误:
【问题讨论】:
标签: javascript ruby-on-rails ruby ajax jquery-select2