Yii2 Kartik Select2 Ajax 控制器 - 结果未显示

Posted

技术标签:

【中文标题】Yii2 Kartik Select2 Ajax 控制器 - 结果未显示【英文标题】:Yii2 Kartik Select2 Ajax Controller - Result not showing 【发布时间】:2018-11-22 23:48:42 【问题描述】:

我已经在我的 yii2 应用程序中设置了一个 select2。我希望 select2 通过 ajax 从控制器操作中获取结果数据。所以我查阅了文档here 并做了一些修改。不幸的是,即使我返回固定/平面 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; '),
    ],
]);

SiteController.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)默认值“正在搜索...”

那么,我是不是把小部件配置错了?还是我错过了什么?

提前感谢您的帮助! 干杯,卢克

【问题讨论】:

开发者工具中的控制台面板说什么,其次yii调试栏对你调用的路由说什么?如果您查看 Ajax 请求的日志,它应该会显示任何错误 【参考方案1】:

一切都很好,但您返回的是 results key 的 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;

【讨论】:

按照@double-h 的建议更改了我的代码,一切都按预期工作。谢谢。

以上是关于Yii2 Kartik Select2 Ajax 控制器 - 结果未显示的主要内容,如果未能解决你的问题,请参考以下文章

YII2:kartik Select2

Yii2:Gridview过滤器中的kartik\Select2下拉列表

kartik\Select2 作为 yii2\grid 中的过滤器输入

不加载kartik 的select2 作为GridView 中的过滤器。 Yii2

YII2:kartik Select2

Yii2 - 使用 Ajax 加载为 Select2 插件设置值