请阅读编辑,它是一个小清洁工。
select_tag使用 Select2 未获取/发送ajax请求。
我正在尝试使用ajax获取select_tag
的数据,因为表格中有很多行。
<h3> Ajax send requests but I have Client.all </h3>
<%= invoice_form.collection_select :client_id, Client.all, :id, :name %>
<h3> Ajax not working </h3>
<input id="invoice_seller_id" />
这些标记与Select2库一起使用以替换选择框。
从input
生成的第一个<%= invoice_form.collection_select :client_id, Client.all, :id, :name %>
发送正确的 json 请求,甚至得到正确的回复。
但是有信息没有找到结果。
在第二种方法中,浏览器甚至不发送ajax请求。
<h3> Ajax send requests but I have Client.all </h3>
<%= invoice_form.collection_select :client_id, Client.all, :id, :name %>
<h3> Ajax not working </h3>
<input id="invoice_seller_id" />
invoice.js.coffee
jQuery ->
$('#invoice_client_id').select2
theme: 'bootstrap'
ajax:
url: '/clients.json'
dataType: 'json'
results: (data, page) ->
{ results: $.map(data, (client, i) ->
{
id: client.id
text: client.name
}
) }
$('#invoice_seller_id').select2
theme: 'bootstrap'
ajax:
url: '/clients.json'
dataType: 'json'
results: (data, page) ->
{ results: $.map(data, (client, i) ->
{
id: client.id
text: client.name
}
) }
为什么第一个输入结果未插入 select_tag 。为什么第二个输入没有发送任何请求?
我正在尝试重新创建:Using Select2 with Ruby on Rails
我只更改了这两个inpu字段。
<h3> Ajax not working </h3>
<%= invoice_form.collection_select :seller_id, [], :id, :name %>
它现在正在发送ajax请求并获得正确的响应,但不会插入数据以选择选项并仍显示未找到结果
答案 0 :(得分:1)
Select2
仅适用于select
输入标记。在第二个选项中,您只需在select2
标记的输入上应用select
,这就是它无法正常工作的原因。
现在为什么结果没有在select2中显示。
请注意,select2
希望以
[{id: 1,text: 'Option1'},{id: 2,text: 'Option2'}]
如果响应与上述格式不同,则需要在客户端处理processResults。你试图这样做,但看起来你选择了错误的选项。
您需要定义processResult
,所以这是执行此操作的脚本。
您可以找到更多详细信息Select2 Ajax FAQ
jQuery ->
$('#invoice_client_id').select2
theme: 'bootstrap'
ajax:
url: '/clients.json'
dataType: 'json'
processResults: (data) ->
return {
results: $.map(data, (client, i) ->
{
id: client.id
text: client.name
}
)}
我希望这有效。
P.S请注意,当您使用select2的远程选项时,它会在服务器端过滤结果,因此select2将显示所有返回的结果。