1

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

Luc
  • 365
  • 4
  • 22
  • What does the console panel in developer tools say and secondly what does the yii debug bar say for the route you called? If you look in the logs of the Ajax request, it should show any errors – Jonnny Jun 13 '18 at 12:19

1 Answers1

2

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;
}
Double H
  • 4,120
  • 1
  • 15
  • 26
  • Changed my code as @double-h suggested and everything works as expected. Thanks. – Luc Jun 13 '18 at 18:33