【问题标题】:How to populate Yii2 Autocomplete with AJAX call如何使用 AJAX 调用填充 Yii2 自动完成功能
【发布时间】:2014-08-27 01:03:17
【问题描述】:

我正在尝试从 Yii 1.1 切换到 Yii2。这是 TextAreaJuiAutoComplete 小部件的源属性

'source'=>"js:function(request, response) {
    $.getJSON('".$url"', {
        term: extractLast(request.term)
    }, response);
}",

这不再适用于带有 yii\jui\AutoComplete 的 Yii2。谁能给我一个提示是什么原因?底层 JavaScript 对象应该是相同的。

如果我输入以下代码,它可以工作,但我想改用 ajax 调用。

'source' => [ "c++", "java", "php", "coldfusion", "javascript", "asp", "ruby" ],

【问题讨论】:

  • 请用firebug检查你的javascript并查看错误
  • 没有错误,只是什么也没发生。

标签: autocomplete yii2


【解决方案1】:

以like 为例。 控制器:

 public function actionSearch($term)
        {
            \Yii::$app->response->format = \yii\web\Response::FORMAT_JSON;
            $rs = Cure::find()->where(['like', 'name_uz', $term])->all();
           if($rs !=null){
               $row_set = [];
               foreach ($rs as $row)
               {
                   $row_set[] = $row->name_uz; //build an array
               }
               return $row_set;
           }else{
               false;
           }

        }

在视图中:

<? use yii\jui\AutoComplete;?>
<?= AutoComplete::widget([
    'model' => $model,
    'attribute' => 'country',
    'options' => ['class' => 'form-control'],
    'clientOptions' => [
        'source' => Url::to(['cure/search']),
        'minLength'=>'2',
    ],
]); ?>

【讨论】:

    【解决方案2】:

    试试这个:

    AutoComplete::widget([
        'name'=>'myacfield',
        'clientOptions' => [
            'source' => Url::to(['autocomplete']),
                 'minLength'=>'2',
             ],
        'options'=>[
            'class' => 'form-control'
        ]
    ]);
    

    但是您的 AutoComplete 操作必须返回一个一维数组,例如

    ...            
    $rs = Yii::$app->db->createCommand($sql)->queryAll();
    $row_set = [];
    foreach ($rs as $row)
    {
        $row_set[] = $row['name']; //build an array
    }
    echo json_encode($row_set); //format the array into json data
    

    【讨论】:

      【解决方案3】:

      试试这个:

      use yii\web\JsExpression;
      
      .....
      .....
      
      
      'source'=>new JsExpression("function(request, response) {
          $.getJSON('".$url."', {
              term: request.term
          }, response);
      }"),
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-03-01
        • 2014-03-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-12-29
        相关资源
        最近更新 更多