Hallo juppix,
Der Kalender erwartet in Javascript ja ein "new Date(2018, 10, 17)".
Ganz genau, und jQuery liefert es Dir erstmal als String.
Auf der von Dir verlinkten GitHub Seite ist ein Beispiel, wie man das Problem durch Post-Processing lösen kann.
Ich habe das gleiche Problem in einem aktuellen Web-Projekt in unserem Intranet, da habe ich es mit einem jQuery-Callback gelöst. Einfach weil ich das mal ausprobieren wollte...
Was man definieren kann, ist ein eigener JSON-Decoder. Den "text json" Converter verwendet jQuery beim Empfang einer JSON Response, und defaultmäßig steckt dahinter einfach JSON.parse.
In meiner Erweiterung auch, aber JSON.parse hat einen weiteren Parameter: Die Wiederbelebungsfunktion (reviver function). Diese Funktion wird für jedes Datenelement des vom JSON-String aufgespannten Objektbaumes aufgerufen, beginnend bei den Blättern bis hin zur Wurzel. Sie bekommt zwei Parameter: Name und Wert der wiederzubelebenden Objekt-Eigenschaft. Das ist nicht ganz einfach bei komplexen Objektbäumen, weil je nach Struktur der Name der Eigenschaft nicht reicht. In dem Fall muss man auf Post-Processing zurückfallen.
Ich habe nicht geprüft, was performanter ist: Postprocessing oder eine Callback-Funktion, die pro Aufruf abfragen muss ob sie überhaupt aktiv werden muss. Vorteil des Callback mag sein, dass man hier keine Funktion bauen muss die den Objektbaum traversiert, sondern diese Aufgabe von JSON.parse abgenommen bekommt. In deinem Fall ist es einfach, weil Du ein Array of Objects vom Server bekommst, da musst Du nur sequenziell drüberlaufen und die beiden Date-Werte konvertieren.
var jqTextToJson = {
"text json": function(jsonString) {
return JSON.parse(jsonString,
function(name, value) {
if (name === "startDate" || name === "endDate")
return new Date(value);
return value;
});
}
};
$.ajax({
dataType: "json",
url: address,
converters: jqTextToJson
})
.done(function (result) {
// Ergebnis verarbeiten
})
.fail(function(xhr) {
setErrorMessage("Fehler beim Laden: " + xhr.responseJSON);
});
Rolf
sumpsi - posui - clusi