Select_tag无法从json响应中获取数据

时间:2016-06-16 15:03:27

标签: jquery ruby-on-rails ajax ruby-on-rails-4 coffeescript

问题

请阅读编辑,它是一个小清洁工。

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库一起使用以替换选择框。

这就是浏览器的外观: enter image description here

input生成的第一个<%= invoice_form.collection_select :client_id, Client.all, :id, :name %>发送正确的 json 请求,甚至得到正确的回复。

enter image description here

但是有信息没有找到结果。

在第二种方法中,浏览器甚至不发送ajax请求。

代码

发票/ _form.html.erb
<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

编辑1

我只更改了这两个inpu字段。

  <h3> Ajax not working </h3>
  <%= invoice_form.collection_select :seller_id, [], :id, :name %> 

它现在正在发送ajax请求并获得正确的响应,但不会插入数据以选择选项并仍显示未找到结果

1 个答案:

答案 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将显示所有返回的结果。