doulu8415
2018-06-13 11:48
浏览 195
已采纳

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

I have set up a select2 within my yii2 application. I want the select2 to get the result data from the controller action via ajax. So i looked up the documentation here and made some adaption. Unfortunately no result will be shown, even if i return fixed / plane json result.

view

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;
}

If i debug, i see that the controller is called. But the templateResult function returns (console.log) only the default value "Searching…"

So, do i configurate the widget wrong? Or do i miss something here?

Thanks in advance, for some help! cheers, Luc

图片转代码服务由CSDN问答提供 功能建议

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

查看

   Select2 :: widget([
'name'=>'kv-repo-template',
'pluginOptions'=> [
'allowClear'=> true,
'minimumInputLength'=> 3  ,
'language'=> [
'errorLoading'=> new JsExpression(“function(){return'Taiting 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  ;}'),
],
]); 
   
 
 

SiteControlle r.php

  public function actionAddress($ q = null,$ id = null){
 $ out ['results'] = ['id'  =>  1,'text'=>  'test']; 
 Yii :: $ app-> response-> format = Response :: FORMAT_JSON; 
返回$ out; 
} 
   
 
 <  p>如果我调试,我看到控制器被调用。 但是 templateResult 函数只返回(console.log)默认值“正在搜索...” 
 
 

那么,我是否错误地配置了小部件? 或者我会错过这里的一些东西吗?

提前致谢,谢谢你们的帮助! ,Luc

  • 写回答
  • 好问题 提建议
  • 关注问题
  • 收藏
  • 邀请回答

1条回答 默认 最新

  • douyi4544 2018-06-13 13:04
    已采纳

    Every Thing is fine but you are returning JSON Object of results key , Instead of Object Please return as Array like.

    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;
    }
    
    已采纳该答案
    评论
    解决 无用
    打赏 举报

相关推荐 更多相似问题