使用 YII 框架选择 2 ajax 选项

Select2 ajax option using YII Framework

我在一个项目中使用 Yii 框架,并且我正在使用一个使用 select2 jquery 的扩展。我无法理解 ajax 的实现如何与此扩展或 select2 一起工作。

我的 ajax 呼叫 returns 以下 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;
                              }',
                    ),
                ));

我从这个 Question! The link to the extension am using is YII select2 Extention!

中找到了一个相关问题

所以一周后我合并了这个问题的答案。

首先让我强调一下 select2 ajax 或者在我的例子中是 Yii ESelect 扩展。

jquery的ajax选项与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 padding) 允许在查询时发送查询参数。至于我的情况,我没有传递任何其他参数,例如 authkey e.t.c。在我的例子中,我将数据类型更改为 json 并返回一个带有 id 和文本的 json 作为结果。请参阅下面我的工作片段。

 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 }
            }',
                    ),
                ),
            ));