【问题标题】:Select2 ajax option using YII Framework使用 YII 框架的 Select2 ajax 选项
【发布时间】:2015-04-07 10:30:01
【问题描述】:

我在一个项目中使用 Yii 框架,并且我正在使用一个使用 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;
                              }',
                    ),
                ));

我从这个Question 发现了一个相关问题!我正在使用的扩展程序的链接是 YII select2 Extention!

【问题讨论】:

    标签: php jquery ajax jquery-select2 yii-extensions


    【解决方案1】:

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

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

    jquery 的 ajax 选项与 Eselect 扩展相同,即 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 等。在我的情况下,我将数据类型更改为 json 并返回一个带有 id 和 text 作为结果的 json。请参阅下面我的工作 sn-p。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-06-25
      • 2015-01-26
      • 2011-10-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-11-16
      相关资源
      最近更新 更多