Я использую Yii Framework в проекте, и я использую расширение, которое использует Select2 JQuery. Я не могу понять, как реализация для ajax работает с этим расширением или select2.
Мой вызов ajax возвращает следующий json.
[
{"id":"1", "text" : "Option one"},
{"id":"1", "text" : "Option one"},
{"id":"1", "text" : "Option one"}
]
Расширение yii расширяет расширение select2, как показано ниже
$this->widget('ext.select2.ESelect2', array(
'name' => 'selectInput',
'ajax' => array(
'url'=>Yii::app()->createUrl('controller/ajaxAction'),
'dataType' => 'json',
'type' => 'GET',
'results' => 'js:function(data,page) {
var more = (page * 10) < data.total; return {results: data, more:more };
}',
'formatResult' => 'js:function(data){
return data.name;
}',
'formatSelection' => 'js: function(data) {
return data.name;
}',
),
));
Я нашел связанный с этим вопрос Вопрос! Ссылка на расширение использую YII select2 Расширение!
Итак, через неделю я слился с ответом на этот вопрос.
Для начала позвольте мне выделить ajax select2 или в моем случае расширение Yii ESelect.
Опции ajax для jquery такие же, как и для Eselect Extention, то есть url, type и datatype, хотя есть небольшая разница в формате, возвращаемом после успешного запроса.
Что касается результирующего набора для Eselect / select2, ожидается, что будут возвращены два параметра. то есть
id : data.myOptionsValue;
text : data.myOptionText;
Ссылка :: https://select2.github.io/options.html#ajax
если мы хотим настроить формат для восстанавливаемого набора результатов, мы можем пойти дальше и расширить плагин, используя
'formatResult' => 'js:function(data){
return data.name;
}',
'formatSelection' => 'js: function(data) {
return data.name;
}',
У меня также была проблема, заставляющая меня думать, как запрашивается расширение. Осмотревшись, я понял, что у нас есть два типа данных jsonp и json, и эти два типа данных будут обрабатывать данные по-разному.
Jsonp (заполнение json) позволяет отправлять параметры запроса при запросе. Что касается моего случая, я не передаю никаких других параметров, например, authkey e.t.c. В моем случае я изменил тип данных на json и вернул json с id и текстом в качестве результата. Смотрите ниже мой рабочий фрагмент.
echo CHtml::textField('myElementName', '', array('class' => 'form-control col-lg-12'));
$this->widget('ext.select2.ESelect2', array(
'selector' => '#myElementName',
'options' => array(
'placeholder' => 'Search ..',
'ajax' => array(
'url' => Yii::app()->createUrl('controller/ajaxAction'),
'dataType' => 'json',
'delay' => 250,
'data' => 'js: function(term) {
return {
q: term,
};
}',
'results' => 'js: function(data){return {results: data }
}',
),
),
));
Других решений пока нет …