Ich verstehe, dass dies ein beliebtes Problem ist, und habe alle ähnlichen Fragen hier auf Stack Overflow und anderen Websites (einschließlich der Datatables-Website) gelesen.
Zur Verdeutlichung verwende ich
- PHP Codeigniter
- Materliazecss
Ich habe auch sichergestellt, dass ich das JSON-Array korrekt empfangen habe:
[{"name_en":"hello","phone":"55555555"},{"name_en":"hi","phone":"00000000"}]
Meine HTML-Tabelle sieht folgendermaßen aus:
<table id="customer_table">
<thead>
<tr>
<th>Name</th>
<th>Phone</th>
</tr>
</thead>
</table>
Und hier ist meine document.ready
Funktion:
$(document).ready(function(){
//$('#customer_table').DataTable();
$('#customer_table').DataTable( {
"ajax": 'json',
"dataSrc": "",
"columns": [
{ "data": "email" },
{ "data": "name_en" }
]
});
});
Der Fehler, den ich bekomme, ist
Nicht erfasster TypeError: Die Eigenschaft 'Länge' von undefined kann nicht gelesen werden
quelle
Es ist noch einfacher: Verwenden Sie einfach die
dataSrc:''
Option in der Ajax-Definition, damit dataTable ein Array anstelle eines Objekts erwartet:$('#pos-table2').DataTable({ processing: true, serverSide: true, ajax:{url:"pos.json",dataSrc:""} } );
Siehe Ajax-Optionen
quelle
OK, danke an alle für die Hilfe.
Das Problem war jedoch viel einfacher.
Alles, was ich tun muss, ist, meinen JSON zu reparieren, um das Array einem Attribut namens data wie folgt zuzuweisen.
{ "data": [{ "name_en": "hello", "phone": "55555555", "email": "a.shouman", "facebook": "https:\/\/www.facebook.com" }, ...] }
quelle
Versuchen Sie Folgendes: Die Rückgabe muss d sein, nicht d.data
ajax: { "url": "xx/xxx/xxx", "type": "GET", "error": function (e) { }, "dataSrc": function (d) { return d } },
quelle
error
zureturn d
? Ich habe den gleichen Fehler wie oben erhalten, konnte aber den Tippfehler oder was auch immer nicht finden. Dies hat mein Problem gelöst.Wenn Sie Ajax als Funktion verwenden, denken Sie daran, dass JSON-Daten mit festgelegten Parametern zurückgegeben werden.
$('#example').dataTable({ "ajax" : function (data, callback, settings) { callback({ data: [...], recordsTotal: 40, recordsFiltered: 40} )); } })
quelle
Wenn Sie über JSON-Daten verfügen, wird der folgende Fehler angezeigt
Eine bessere Lösung besteht darin, ein
var data
für das lokale JSON-Array-Objekt zuzuweisen. Details finden Sie unter: https://datatables.net/manual/tech-notes/4Auf diese Weise können Sie den Tabelleninhalt anzeigen.
$(document).ready(function(){ $('#customer_table').DataTable( { "aaData": data, "aoColumns": [{ "mDataProp": "name_en" }, { "mDataProp": "phone" }, { "mDataProp": "email" }, { "mDataProp": "facebook" }] }); });
quelle
In meinem Fall hatte ich meine Json ein Attribut zuweisen genannt aaData wie in Datentabellen Ajax - Beispiel , die aussahen Daten dies .
quelle
Dies kann passieren, wenn der Name Ihrer Ansichtseigenschaft und der Name im Spaltenabschnitt der Datentabelle nicht übereinstimmen. Stellen Sie sicher, dass der Name der Eigenschaft und der Name der Spaltendaten übereinstimmen
quelle
Während die obigen Antworten die Situation gut beschreiben, überprüfen Sie bei der Fehlerbehebung des Problems auch, ob der Browser wirklich das Format erhält, das DataTables erwartet. Es gibt vielleicht andere Gründe, das nicht zu bekommen
data
. Zum Beispiel, wenn der Benutzer keinen Zugriff auf die Daten-URL hat und stattdessen HTML erhält. Oder das Remote-System verfügt über einige unglückliche "Korrekturen". Die Registerkarte "Netzwerk" in den Debug-Tools des Browsers hilft.quelle
Sie können versuchen, Ihre Felder auszuchecken, während Sie ein E-Mail-Feld rendern, das in Ihrem Ajax nicht verfügbar ist
$.ajax({ url: "url", type: 'GET', success: function(data) { var new_data = { "data": data }; console.log(new_data); } });
quelle