Datatables - dynamische Spalten
Ich verstehe, dass diese Frage gestellt wurde, bevor, aber meine Variante nicht mit den anderen Antworten.
Habe ich eine json-Daten Quelle in dieser form :
{
"columns":[
{"title":"Store Number","data":"StoreNbr"},
{"title":"Store Name","data":"StoreName"},
{"title":"2016-01-01","data":"2016-01-01"},
{"title":"2016-01-02","data":"2016-01-02"}
],
"data":[
{"2016-01-01":"51","StoreNbr":"1","StoreName":"Store 1","2016-01-02":"52"}
]
}
Ich bin laden der Daten wie diese :
$("#datatable").DataTable({
"ajax": {
"url": "http://myjsonurl-that-produces-above-response",
"dataSrc": "data"
},
"columns": [
{"title":"Store Number","data":"StoreNbr"},
{"title":"Store Name","data":"StoreName"},
{"title":"2016-01-01","data":"2016-01-01"},
{"title":"2016-01-02","data":"2016-01-02"},
],
dom: "Bfrtip",
"bProcessing": true,
"bServerSide" : true
});
Den oben funktioniert einwandfrei. Was ich brauche, ist das laden der Spalten dynamisch, wie diese :
"columns": $.getJSON($('#datatable').DataTable().ajax.url(),
function(json){
return (JSON.stringify(json.columns));
});
Alles was ich bekomme ist ein aDataSource Fehler.
Wenn ich das ausführen .getJSON, was überall sonst in den code bekomme ich die erwartete Antwort, die ich brauche. Irgendwelche Ideen?
Möchte ich diese zu arbeiten, wie es ist vorzugsweise als mein datasource ändert sich ständig, basierend auf Filter ich anwenden, die Auswirkungen auf die json-Quelle, dataset usw.
Update :
Weg wird die Tabelle initialisiert :
<script type="text/javascript">
TableManageButtons.init();
TableManageButtons = function () {"use strict"; return { init: function () { handleDataTableButtons() } }}();
var handleDataTableButtons = function () {
"use strict";
0 !== $("#datatable-buttons").length && $("#datatable-buttons").DataTable({
"ajax": {
"url": "http://myjsonurl.php",
.......
Du musst angemeldet sein, um einen Kommentar abzugeben.
Versuchen Sie, die Spalten ersten und fahren Sie dann mit datatables Initialisierung:
BEARBEITEN
Wenn ich das richtig verstehe, Sie wollen, dies zu tun:
In dieser Weise, wenn Sie anrufen
getColumns()
die Ausführung asynchron ist, so dass die Spalten werden nicht definiert.Das ist, warum Sie rufen Sie die DataTable-Initialisierer in der getJSON-callback-Funktion.
Anderen Weg sein könnte, um die Spalten in einer asynchronen Funktion Einstellung
async: false
(Check diese Frage)Können Sie eine benutzerdefinierte js-Funktion, um Ihre Header in Ort, sobald Sie die Antwort vom server. Einen Blick in die unten code:
JSON-Antwort vom server:
- Und js-Methode, um es zu verarbeiten zu setzen-Header auf Platz:
Überprüfen Sie diese "url für mehr Klarheit.
Hoffe, das hilft!!