Javascript 使用AJAX将JSON标记加载到Select2中
好的,我使用下面的代码抓取一个标签列表并将其加载到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
[“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
});
}
});
});