如何使用AJAX调用填充Yii2自动完成功能

3
我正在尝试从Yii1.1切换到Yii2。这是TextAreaJuiAutoComplete小部件的源属性。
'source'=>"js:function(request, response) {
    $.getJSON('".$url"', {
        term: extractLast(request.term)
    }, response);
}",

在Yii2中,使用yii\jui\AutoComplete时已经不起作用了。有人能给我提示是什么原因吗?底层JavaScript对象应该是相同的。

如果我使用以下代码,它可以工作,但我想要使用ajax调用。

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

请使用 Firebug 检查您的 JavaScript 并查看错误。 - Dency G B
没有错误,只是什么也没有发生。 - Ivica Lazarević
3个回答

4

试试这个:

use yii\web\JsExpression;

.....
.....


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

1

试试这个:

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

0

像这样的例子。 控制器:

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接