这是我第一次尝试select2,我正在触及一个可能是基本问题的问题。选择2问题填充选择
选择控制代码:
<select class="form-control" id="trade-select" name="trade-select">
<option>...</option>
</select>
我用下面的代码通过一个ColdFusion函数来获取数据:从调用返回到AJAX URL
var options =
{
theme: 'bootstrap',
ajax:
{
url: "/ajax/search-trades.cfm",
dataType: 'json',
data: function (params) { return { query: params.term, 'groups_only': true }; },
processResults: function (data, page)
{ // parse the results into the format expected by Select2.
alert(data.DATA); // see note further below
return {results: data.DATA, more: false};
}
}
};
$('#trade-select').css('width', '100%').select2(options)
.on('change', function(event)
{
if (this.value == '') return;
$('#trade-select').val('').trigger('change');
});
原始JSON数据如下:
{"COLUMNS":["TRADE_CATEGORY"],"DATA":[["Appliance Repairs"],["Furniture Repair"],["Painting & Decorating"]]}
上述代码中的警报返回以下内容,essentinti结盟没有括号或任何一个逗号分隔的列表:
电器售后维修,家具修理,喷漆&装饰
的问题是,选择不与返回的数据填充。我猜这是与返回数据的格式有关的东西。
不知道我是否提供了足够的信息,所以让我知道你是否需要其他东西。
对于任何可能有想法的ColdFusion开发人员,以下是通过ajax url调用的ColdFusion模板。我知道我可以直接拨打电话到CFC,而不需要中间模板:
<cfsilent>
<cfparam name="url.groups_only" default="true">
<cfparam name="url.query" default="">
<cfset oSystem = createObject("component","cfcs.system")>
<cfset qTradeCategories = oSystem.getTradeCategories(
groups_only=url.groups_only,
query=url.query)>
</cfsilent>
<cfoutput>#SerializeJSON(qTradeCategories)#</cfoutput>
(编辑)望着例子,选择2预计该数据将在比你的CFM脚本返回不同的。 [这个例子](https://select2.github.io/examples.html)表明它需要一个类似''{id:0,text:'enhancement'}]''的结构数组。这不是你的CF脚本返回的。或者修改脚本以返回适当的结构,或者循环访问processResults()中的'data'对象并构建select2期望的结构。 – Leigh
@Leigh,这正是我在答案中的例子:) – Dekel
好的,我会试一试,然后回来。我相信你是对的。 – user460114