Auffüllen einer jQuery Select2() Kontrolle mit JSON-Daten aus PHP
Ich getan haben die gleiche Sache mehrmals (auch am gleichen Projekt eigentlich) und es funktioniert gut. Ich habe ein Problem nur mit dieser Instanz des gleichen Codes.
Zunächst wähle ich einige Daten aus einer db-Tabelle:
$azioni = $pdo->query("SELECT id_az, concat_ws('-',Descrizione, RGE) as descrizione
FROM azioni_head
JOIN sofferenze ON sofferenze.id_soff = azioni_head.id_soff
ORDER BY Descrizione")
->fetchAll(PDO::FETCH_ASSOC);
Das gibt mir ein array wie folgt aus (nur die ersten paar items):
Array
(
[0] => Array
(
[id_az] => AZ000000126
[descrizione] => Acciaierie Weissenfels S.p.A.-n/d
)
[1] => Array
(
[id_az] => AZ000000017
[descrizione] => Acofer S.p.A.-n/d
)
)
Ich dann konvertieren Sie das array in ein Json-array zu tun:
var azioni = <?php echo json_encode($azioni); ?>;
und schließlich habe ich das Auffüllen Select2 mit diesen Daten, aber dieses mal das select2 hat keine Elemente im inneren.
Wenn ich versuche, um das Feld anzuzeigen, sobald es codiert ist mit alert(azioni.join( ));
ich bekommen:
[object object],[object object],[object object],[object object],
Schließlich habe ich ausgeführt:
$('#cod_az').select2({ placeholder: "Scegli", data: azioni });
Was ist falsch? Warum kann ich nicht verwenden Sie dieses array zu füllen Select2 mit den Daten? Es funktioniert in anderen Abschnitt meiner Bewerbung!
Bearbeiten
dies ist das Ergebnis der console.log(azioni) im firebug:
[
Object { id_az="AZ000000126", descrizione="Acciaierie Weissenfels S.p.A.-n/d"},
Object { id_az="AZ000000017", descrizione="Acofer S.p.A.-n/d"},
Object { id_az="AZ000000039", descrizione="ADANI SAS DI ADANI PAOLO & C. S.p.A.-n/d"},
Object { id_az="AZ000000019", descrizione="Administration Speciale ...NG S.A. en faillite-n/d"}
]
- das gleiche Ergebnis, wie mit join
console.log(azioni)
und schauen Sie in Ihrem Javascript-Konsole.alert()
ist nutzlos für die Fehlersuche.- So... Frage beantwortet?
- Nein. Dieses json-array ist die einzige, die ich nicht verwenden können, zum Auffüllen der Daten in den select2 (alle anderen Bedingungen gleich sind), während der gleiche code funktioniert in anderen Seiten auf der gleichen Anwendung!
- Gut, da das array ist offensichtlich in Ordnung, und wir sehen nicht, was Sie tun mit ihm, wir können nicht viel helfen an dieser Stelle weiter.
- Das Ergebnis erhalten Sie von dieser: alert(azione[0]["id_az"]) und alert(azione[0]["descrizone"])?
- sorry! vergessen eine Zeile code in meiner Frage! meine Schuld!
- "Die Objekte, die der Benutzer auswählen kann, übergeben werden sollen, als array mit jedes Objekt mit
id
undtext
- Eigenschaften." select2.github.io/options.html - whoah! nicht bemerkt, dass! dies löst das Problem. Wird Sie es zu einer Antwort, damit kann ich markieren Sie es als in der Nähe?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Debuggen, verwenden Sie
console.dir(azioni);
um zu überprüfen Ihre Objekte.Ändern Sie Ihre
id_az
unddescrizione
Tastenid
undtext
https://select2.github.io/examples.html
Standardmäßig jquery select2 erwartet Daten werden im id - /text-format.
Das ist der standard und gewünschte Verhalten. Was Sie wollen, ist eine Prüfung der Inhalte des Objekts, anstatt die
[object Object]
Zeichenfolge, die das richtige Ergebnis destoString()
Methode.Gibt es mehrere Möglichkeiten zu prüfen, die Struktur der arrays und Objekte in Javascript. Was ich Tue, ist ziemlich einfach und funktioniert gut, aber es hat eine leichte twist in es.
Das mag seltsam klingen, zu re-Kodieren die Daten in JSON, aber Sie haben getan eine volle umdrehung in:
So können Sie wirklich sicher sein, dass die
input
string ist gültig, JSON und was Sie in deralert()
ist der eigentliche Inhalt. Ich weiß nicht, eine einfachere Methode als diese.EDIT: Bedenken Sie, es ist nicht das gleiche wie das drucken der
input
string direkt. Die Dekodieren/Rekodieren turn-around wirklich tut viel für Sie: es zeigt, dass es kann decodieren des JSON und zeigt Ihnen, wie es tatsächlich ist nach der Entschlüsselung. Zum Beispiel, die Reihenfolge der Eigenschaften ist nicht erhalten.