Это моя первая попытка с select2, и я поражаю проблему, которая, вероятно, является чем-то основным.Select2 issues population select
Выбор: контрольный код:
<select class="form-control" id="trade-select" name="trade-select">
<option>...</option>
</select>
Я использую следующий код для извлечения данных с помощью функции ColdFusion:
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 от вызова к АЯКС URL заключается в следующем:
{"COLUMNS":["TRADE_CATEGORY"],"DATA":[["Appliance Repairs"],["Furniture Repair"],["Painting & Decorating"]]}
Предупреждение в приведенном выше коде возвращает следующее: essenti союз разделенный запятыми список без каких-либо скобок или что-нибудь:
Appliance Ремонт, ремонт мебели, картины & Украшать
Вопрос заключается в том, что выбор не заселение с возвращенными данными. Я предполагаю, что это связано с форматом возвращаемых данных.
Не уверен, что я предоставил достаточно информации, поэтому дайте мне знать, если вам нужно что-нибудь еще.
Для любого разработчика ColdFusion, у которого может быть идея, следующий шаблон ColdFusion вызывается через URL-адрес ajax. Я понимаю, что я мог бы сделать вызов непосредственно к 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>
(Edit) Глядя на примерах, Выбор2 ожидает данные, чтобы быть в другом, чем ваш CFM скрипт возвращается. [Этот пример] (https://select2.github.io/examples.html) предполагает, что он ожидает массив структур, подобный этому [[id: 0, text: 'enhancement]}]. Это не то, что возвращает ваш CF-скрипт. Либо измените скрипт, чтобы вернуть правильную структуру для начала, либо зациклируйте объект 'data' внутри внутри' processResults() 'и постройте структуру select2. – Leigh
@Leigh, это как раз мой пример в ответе :) – Dekel
Хорошо, я попробую и вернусь. Я уверен, что ты прав. – user460114