Während meiner Arbeit mit PHP, jQuery und mustache.js hatte ich hin und wieder das Problem, das ganze Datensätze nicht angezeigt oder interpretiert wurden. Sie wurden zwar übertragen, allerdings schien mustache.js die JSON Daten zu ignorieren. Da im Debugger keine weiteren Ausgaben zu finden waren, bin ich den Weg von der Quelle bis zum Frontend nachgegangen und auf folgendes gestoßen …
Als Beispiel eine herkömmliche MySQL Datenbank-Abfrage mit einem Ergebnis Array:
$sSql = 'SELECT id, somefield FROM sometable';
$aData = $this->oDB->getArray($sSql); // DB object Lupercal FW 1.2
print(json_encode($aData));
Damit habe ich einen sauberen JSON string wie diesem:
[{"iIdAdCampaign":"5","iIdAdDisplay":"7","sAdHeadline":"headline hier" ...
Und genau dies ist der Punkt. ich bekomme einen STRING. Mustache.js verarbeitet aber JS Objekte. Also heißt es den ankommenden String via $.parseJSON zu konvertieren. Im Quellcode kann dies z.B. so aussehen:
$.ajax({
type: 'POST',
url: [request url],
success: function([response]) {
str2obj = $.parseJSON([response]); // konvertieren <<<<<<
mytpl = '<div>{{myVar1}}</div><div>{{myVar1}}</div>';
var rtpl = Mustache.to_html(s2tpl, d2tpl);
}
});
Im Grunde super simpel, allerdings habe ich auf meiner Suche durch Netz keine Hinweise darauf erhalten. Seither habe ich mir angewöhnt alle JSON Strings die nicht direkt in JS generiert werden generell zuerst zu konvertieren und habe seither keine Probleme mehr mit den Ausgaben gehabt.
BTW: Wenn ein Non-Empty Lists Objekt erzeugt werden soll, dann kann dies durch einfaches hinzufügen des gewünschten Keys direkt nach dem parsen erreicht werden.
Beispiel:
str2obj = $.parseJSON([response]);
objList = {"myKey":str2obj};