AJAX的结果无法采用

时间:2018-03-07 20:44:14

标签: ajax yii2

以下代码将根据预期使用AJAX请求向我提供所有记录。不幸的是,我无法将一条选定的记录变成表格。我可以选择它们,而不是把它们拿走。我假设templateResulttemplateSelection中存在一些错误。

改述问题:不接受它们意味着,我无法采用单个记录显示为表格。它就像狗的食物,不能被狗吃掉,'因为手会一次又一次地移开......希望这有助于理解我的问题。 P.S::id_ba_xml_gelernter_beruf_1是模型的属性

以下是视图的代码:

$url = \yii\helpers\Url::to ( [ 'berufe' ] );
    ?><?=
    $form->field ( $model , 'id_ba_xml_gelernter_beruf_1' , [ 'addon' => [
            'prepend' => [ 'content' => 'gelernter Beruf 1' ] ] ] )->widget ( \kartik\widgets\Select2::classname () , [
        'options' => [ 'placeholder' => 'Berufe suchen ...' ] ,
        'pluginOptions' => [
            'allowClear' => true ,
            'minimumInputLength' => 3 ,
            'language' => [
                'errorLoading' => new JsExpression ( "function () { return 'Waiting for results...'; }" ) ,
            ] ,
            'ajax' => [
                'url' => $url ,
                'dataType' => 'json' ,
                'data' => new JsExpression ( 'function(params) { return {q:params.term}; }' )
            ] ,
            'escapeMarkup' => new JsExpression ( 'function (markup) { return markup; }' ) ,
            'templateResult' => new JsExpression ( 'function(berufe) { return berufe.text; }' ) ,
            'templateSelection' => new JsExpression ( 'function (berufe) { return berufe.text; }' ) ,
        ] ,
    ] )->label ( false );

这是控制器代码,工作得很好:

public function actionBerufe( $q = null , $id = null ) {
    \Yii::$app->response->format = \yii\web\Response::FORMAT_JSON;
    $out = [ 'results' => [ 'id' => '' , 'text' => '' ] ];
    if ( !is_null ( $q ) ) {
        $query = new \yii\db\Query();
        $query->select ( 'ID, Bezeichnung_neutral_kurz  AS text' )
                ->from ( 'yii2_ba.ba_berufe' )
                ->where ( [ 'like' , 'Bezeichnung_neutral_kurz' , $q ] )
                ->limit ( 20 );
        $command = $query->createCommand ();
        $data = $command->queryAll ();
        $out['results'] = array_values ( $data );
    } elseif ( $id > 0 ) {
        $out['results'] = [ 'id' => $id , 'text' => \common\modules\basis\models\BaBerufe::find ( $id )->Bezeichnung_neutral_kurz ];
    }
    return $out;
}

改述问题

     'templateResult' => new JsExpression ( 'function (berufe) { return console.log(berufe); berufe.text; }' ) ,

会给我这样的id和属性:

Object { ID: "72", text: "\"Absatzfachkraft\"" }
Object { ID: "287", text: "\"Akustikfacharbeiter/in\"" }

     'templateSelection' => new JsExpression ( 'function (berufe) { return console.log(berufe); berufe.text; }' ) ,

会给我以下输出:

Object { id: "", text: "Berufe suchen ..." }
Object { id: "", text: "Berufe suchen ..." }

希望这有助于nicolascolman解决问题...

1 个答案:

答案 0 :(得分:1)

id_ba_xml_gelernter_beruf_1是一个对象。试试这个:

        'templateSelection' => new JsExpression ( 'function (id_ba_xml_gelernter_beruf_1) { return console.log(id_ba_xml_gelernter_beruf_1); id_ba_xml_gelernter_beruf_1.text; }' ) ,

您将在控制台中看到一个具有ID和文本属性的对象。 然后,用您的代码替换console.log(...)。