首页 > 解决方案 > Yii2 Kartik Select2 Ajax 控制器 - 结果未显示

问题描述

我在我的 yii2 应用程序中设置了一个 select2。我希望 select2 通过 ajax 从控制器操作中获取结果数据。所以我在这里查阅了文档并做了一些调整。不幸的是,即使我返回固定/平面 json 结果,也不会显示任何结果。

看法

Select2::widget([
    'name' => 'kv-repo-template',
    'pluginOptions' => [
        'allowClear' => true,
        'minimumInputLength' => 3,
        'language' => [
            'errorLoading' => new JsExpression("function () { return 'Waiting for results...'; }"),
        ],
        'ajax' => [
            'url' => Url::to(['/site/address']),
            'dataType' => 'json',
            'data' => new JsExpression('function(params) { return {q:params.term}; }'),
        ],
        'escapeMarkup' => new JsExpression('function (markup) { return markup; }'),
        'templateResult' => new JsExpression('function(city) { console.log(city); return city.text; }'),
        'templateSelection' => new JsExpression('function (city) { return city.text; }'),
    ],
]);

站点控制器.php

public function actionAddress($q = null, $id = null) {
    $out['results'] = ['id' => 1, 'text' => 'test'];
    Yii::$app->response->format = Response::FORMAT_JSON;
    return $out;
}

如果我调试,我看到控制器被调用。但该templateResult函数仅返回(console.log)默认值“正在搜索...”

那么,我是否配置错误的小部件?或者我在这里想念什么?

在此先感谢,寻求帮助!干杯,卢克

标签: phpyii2jquery-select2kartik-v

解决方案


一切都很好,但是您正在返回resultskey 的 JSON 对象,而不是 Object 请像数组一样返回。

public function actionAddress($q = null, $id = null) {
   $out['results'] = [['id' => 1, 'text' => 'test']]; //convert it as arrays
   Yii::$app->response->format = Response::FORMAT_JSON;
   return $out;
}

推荐阅读