AJAX Anfrage unvollständig

tklustig

Erfahrenes Mitglied
Hallo Leute,
folgendes Problem habe ich bereits auf Stackoverflow und dem Yii-Forum(wo es eigentlich hingehört) gepostet, allerdings ohne ein Feedback zu bekommen. In der Hoffnung, dass es mitunter hier gelöst wird, poste ich es auch hier. Selbstverständlich werde ich vermerken, sobald ich aus genannten Foren Feedback bekomme. Die Syntax ist Framework bedingt und somit etwas eigenwillig, ein Versuch ist es dennoch wert.

Folgende AJAX-Anfrage zeigt mir zwar die Treffer an, ins Formular übernehmen kann ich sie allerdings nicht(s. hochgeladene Datei) . Ich komme mir vor wie ein Hund, dem man ein Leckerlie vor die Nase hält, die Hand aber immer wieder wegzieht:mad:
Weiß jemand Rat? Ich vermute einen inkorrekten escapeMarkup oder templateSelection Aufruf.
id_ba_xml_gelernter_beruf_1 ist eine Propertie des Models, also ein Attribut der Tabelle ($model=ba_berufe)
Hier der AJAX-Aufruf:
PHP:
 <?php
                                $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(id_ba_xml_gelernter_beruf_1) { return id_ba_xml_gelernter_beruf_1.text; }'),
                                        'templateSelection' => new JsExpression('function (id_ba_xml_gelernter_beruf_1) { return id_ba_xml_gelernter_beruf_1.text; }'),
                                    ],
                                ])->label(false);
                                ?>

hier der Conrollercode, der allerdings reibungslos funktionert. Ich poste ihn nur der Vollständigkeit halber:
PHP:
    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;
    }
 

Anhänge

  • AJAX.jpg
    AJAX.jpg
    299,8 KB · Aufrufe: 7
Zuletzt bearbeitet:
Das ist kein pures PHP sondern ein Framework, dass du verwendest
Leider kenne ich das Framework nicht.
 
Yuup. Hatte ich in der Frage bereits erwähnt. Vielleicht trägt dieser Link zur Lösung bei?(http://demos.krajee.com/widget-details/select2 unter Usage:Ajax Loading )
P.S.: Wie gesagt: Diese Frage ist hier eigentlich fehl am Platze, aber mangels Feedback aus dem yii-Forum habe ich es gepostet. Vielleicht kennt der eine oder andere dass yii-Framework und kann mir weiterhelfen?!
 
Was ist eigentlich das genaue Problem?
  • Kommen keine oder falsche Daten an?
  • Werden diese nicht korrekt angezeigt.
Wenn du die Browserkonsole aufmachst (F12) und zum Reiter Netzwerkanalyse gehst, kannst du alle Anfragen und dessen Antworten sehen. Kommt die Ajax-Anfrage in dieser Auflistung vor und wie sieht Antwort korrekt aus oder kommt irgendeine Fehlermeldung?
 
folgende Ausgabe liefert mir der Reiter Netzwerkanalyse:
Code:
Status Method File          Domain    Cause   Type   Transfered   Size      ms
Code:
200     GET   berufe?q=FAC  localhost xhr     json  1.61 KB       1.11 KB → 122 ms
Firedebug kennzeichnet diese Ausagabe mit einem grünen Punkt, also gehe ich davon aus, dass die Anfrage korrekt durchgeführt wurde. Wird sie ja auch, nur in das Formular übernehmen lässt sie sich nicht(Stichwort:Hund).
Firedebug listet übrigens nirgends die Treffer auf. Obige Ausgabe ist alles, was auf eine AJAX-Anfrage hindeutet
Das Problem ist, dass die in der DropDownbox aufgezeigten Werte nicht in das Formular übernommen werden
können: Sie werden korrekt angezeigt , auswählen kann ich sie jedoch nicht. Ich kann die DropDownbox hoch und runterscrollen, um die Werte anzuschauen, mehr aber auch nicht. Wie bereits erwähnt: Der Hund
 
Zuletzt bearbeitet:
Naja, das heißt nur, dass die Verbindung ein 200 ok zurückgegeben hat. Wenn du auf die Zeile klickst, müsstest du weitere Infos zu dem Request bekommen. Unter anderem auch, was als Antwort zurückkommt.

Was kommt den raus, wenn du den Aufruf im Browser ausführst: DeineURL/berufe?q=FAC

Nur so am Rand. Du gibst in deiner Funktion ein Array zurück. Es sollte aber JSON sein. Vielleicht hilft dir das weiter.
 
Das Problem liegt nicht an der eigentlichen Suche. Ich bekomme die erwarteten Records zurück. Das Problem liegt in dem Umstand, diese Werte nicht von der DropDownbox in das Formular übernehmen zu können. Das gibt Firedebug unter dem Reiter Response aus
Code:
results    […]
0    {…}
ID    72
text    "Absatzfachkraft"
1    {…}
ID    197
text    "Agrarfachwirt/in"
2    {…}
ID    198
text    "Agrarfachwirt/in - Rechnungswesen"
3    {…}
ID    259
.
.
 
verwendest du wieder das Plugin von krajee? ich vermute dass das Format, was du als Antwort schickst nicht zu dem passt, was das Programm erwartet.
 

Neue Beiträge

Zurück