Javascript 使用AJAX将JSON标记加载到Select2中

Javascript 使用AJAX将JSON标记加载到Select2中,javascript,ruby-on-rails,json,Javascript,Ruby On Rails,Json,好的,我使用下面的代码抓取一个标签列表并将其加载到select2框中。选项返回为[“test1”、“test2”],应该是正确的格式,但是我假设它们需要以某种方式在循环中处理 //This part is meant to grab the options. I am using model ID 473 for testing $('#ticket_style_id').on("change", function(e) { var tag_list = $.aj

好的,我使用下面的代码抓取一个标签列表并将其加载到select2框中。选项返回为
[“test1”、“test2”]
,应该是正确的格式,但是我假设它们需要以某种方式在循环中处理

    //This part is meant to grab the options. I am using model ID 473 for testing

    $('#ticket_style_id').on("change", function(e) { 
      var tag_list = $.ajax({
        url: "/grab_options/<%= 473 %>",
        async: false
       }).responseText;

     //This part is meant to load the tag_list into a select2 box based on the 
     //selection above        

      $("#ticket_option_list").select2({
        tags: [ tag_list ]
      });
  })
…一切都很好

此控制器代码正在返回JSON:

def grab_options
    style = Style.find(params[:id])
    respond_to do |format|
      format.js { render json: style.option_list.to_json }
    end
  end

出于两个原因,我建议采用以下方法:

1) 它强制将响应解释为JSON(因为
数据类型:'JSON'

2) 它使用成功回调,而不是使用
async:false

$('#ticket_style_id').on("change", function(e) { 
  var tag_list = $.ajax({
    url: "/grab_options/<%= 473 %>",
    dataType: 'json',
    success: function(response) {
      $("#ticket_option_list").select2({
        tags: response
      });    
    }
  });
});
$('#ticket_style_id')。在(“更改”,函数(e){
var tag_list=$.ajax({
url:“/grab\u options/”,
数据类型:“json”,
成功:功能(响应){
$(“#票证选项列表”)。选择2({
标签:响应
});    
}
});
});
编辑:


话虽如此,我相信
Select2
有一个内置的AJAX方法,您可以在其中看到。

您的响应是字符串还是JSON对象?如果它是一个JSON对象,您可能需要将
数据类型:“JSON”
添加到ajax设置对象中,以确保它实际上被解释为JSON。或者,您可以将响应的内容类型设置为
application/json
。它应该是一个json对象。查看我的编辑当您使用
console.log(tag\u list)
时,标签列表的作用是什么?只是一个数组?顺便说一下,我强烈反对使用
async:false
选项,尤其是对于自动完成框。对于任何慢连接的用户来说,这都是一件痛苦的事情。控制台日志=[“test1”,“test2”]我刚刚更新了代码以处理正确的响应内容。
$('#ticket_style_id').on("change", function(e) { 
  var tag_list = $.ajax({
    url: "/grab_options/<%= 473 %>",
    dataType: 'json',
    success: function(response) {
      $("#ticket_option_list").select2({
        tags: response
      });    
    }
  });
});