使用YII Framework选择2 ajax选项


Select2 ajax option using YII Framework

我在一个项目中使用Yii框架,并且我使用了一个使用select2jquery的扩展。我无法理解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扩展!

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

首先,让我强调select2Ajax,或者在我的例子中是YiiESelectExtension。

jquery的ajax选项与Eselect Extetion的ajax选项相同,即url、类型和数据类型,但成功查询后返回的格式略有不同。

至于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-pading)允许在查询时发送查询参数。至于我的情况,我没有传递任何其他参数,例如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 }
            }',
                    ),
                ),
            ));