JQuery Datatables: Die Eigenschaft 'aDataSort' von undefined kann nicht gelesen werden

95

Ich habe diese Geige erstellt und sie funktioniert gut gemäß meinen Anforderungen: Geige

Wenn ich jedoch dasselbe in meiner Anwendung verwende, wird in der Browserkonsole die Fehlermeldung angezeigt, dass die Eigenschaft 'aDataSort' von undefined nicht gelesen werden kann

In meiner Anwendung lautet das Javascript wie folgt: Ich habe die Controller-Ausgabe überprüft ... es funktioniert gut und wird auch auf der Konsole gedruckt.

$(document).ready(function() {

    $.getJSON("three.htm", function(data) {
             // console.log("loadDataTable >>  "+JSON.stringify(data));
             })
             .fail(function( jqxhr, textStatus, error ) {
             var err = textStatus + ', ' + error;
             alert(err);
             console.log( "Request Failed: " + err);
             })
             .success(function(data){
                 loadDataTable(data);
             });

    function loadDataTable(data){
         $("#recentSubscribers").dataTable().fnDestroy();    
         var oTable = $('#recentSubscribers').dataTable({
             "aaData" : JSON.parse(data.subscribers),
             "processing": true,
            "bPaginate": false,
            "bFilter": false,
            "bSort": false,
            "bInfo": false,
            "aoColumnDefs": [{
            "sTitle": "Subscriber ID",
            "aTargets": [0]
        }, {
            "sTitle": "Install Location",
            "aTargets": [1]
        }, {
            "sTitle": "Subscriber Name",
            "aTargets": [2]
        }, {
            "aTargets": [0], 
            "mRender": function (data, type, full) {
                return '<a style="text-decoration:none;" href="#" class="abc">' + data + '</a>';
            }
        }],
            "aoColumns": [{
            "mData": "code"
        }, {
            "mData": "acctNum"
        }, {
            "mData": "name"
        }]
            });

    }       

})
Swateek
quelle
Stellen Sie sicher, dass der Code, den Sie eingefügt haben, mit der Geige (nicht) und dem von Ihnen ausgeführten identisch ist. Auch in der Geige haben Sie zwei aTargets [0], überprüfen Sie: jsfiddle.net/gL0p0t42
Leandro Carracedo
Sie geben nicht die Quelle an, die tatsächlich "aDataSort" aufruft.
Daniel
Meinen Sie die ID der HTML-Tabelle? Ich habe mich darum gekümmert. Lassen Sie mich versuchen, ein Ziel zu haben.
Swateek
@ Daniel die Quelle ist der Parameter für die Funktion loadDataTable ().
Swateek
2
verwandte (neuere) Frage mit Antwort
Nikos M.

Antworten:

129

Es ist wichtig, dass Ihr THEAD in der Tabelle nicht leer ist. Als dataTable müssen Sie die Anzahl der Spalten der erwarteten Daten angeben. Nach Ihren Angaben sollte es sein

<table id="datatable">
    <thead>
        <tr>
            <th>Subscriber ID</th>
            <th>Install Location</th>
            <th>Subscriber Name</th>
            <th>some data</th>
        </tr>
    </thead>
</table>
Gkrish
quelle
26
Was ist, wenn ich eine Anforderung habe, die das Konfigurieren von Spalten und die Anzahl dieser Spalten zur Laufzeit umfasst? Wie kann ich Code für die oben genannte Anforderung implementieren?
CS Lewis
Dies hat mir geholfen, mein Problem mit nicht gedruckten Daten zu beheben. Nun, es hat mir auch geholfen, ein weiteres Problem von mir für datatable zu beheben, wo ich geschrieben habe "Sort":false, und dann konnte es die Liste in absteigender Reihenfolge anzeigen, die vom Controller als kam Model.OrderByDescending(x=>x.Action==0).ThenBy(x=>x.Action).
Sorangwala Abbasali
2
das <thead>muss ein enthalten <tr>, dann <th>s
brahimm
Dies gilt für eine Standard-DataTable (und lösen Sie mein Problem). RE: @CSLewis: Ich bin mir bei statischen Tabellen nicht sicher, aber wenn Sie Spalten zur Laufzeit neben einer Ajax-Anforderung konfigurieren, ist nichts erforderlich, <thead>aber Sie müssen die Spalten in Ihrer DataTable () -Initiation wie folgt definieren: datatables .net / reference / option / columns.data
Harvey Dobson
59

Hatte auch dieses Problem, Dieses Array war außerhalb des Bereichs:

order: [1, 'asc'],
hogarth45
quelle
1
Dieser holt mich immer. Gibt es eine Möglichkeit, das Array standardmäßig auf 0 zu setzen, wenn das Array außerhalb des Bereichs liegt?
JGreasley
6
@JGreasley Sie können es als leeres Array
festlegen
2
Meine Spalten, in denen 5 und ich hier 7 angegeben haben! Vielen Dank
Aiffin
1
Einer! Woche! Eine volle Woche! Und das ist eine 7-Tage-Woche! Und ich bin mir ziemlich sicher, dass ich nicht von 9 bis 5 gearbeitet habe, eher von 9 bis Mitternacht ... all das ist verloren gegangen, weil ich nichts über diesen Fehler wusste !! Arrrrrrrrrrrgh !! ... So viel Zeit verschwendet, ich schäme mich zutiefst, ich habe immer wieder im Internet gesucht und mit allen möglichen Lösungen experimentiert - keiner würde auch nur annähernd das "beheben". Und dann ... durch Zufall und schon verzweifelt ... bin ich auf deine Antwort gestoßen, und ta-da! In fünf Minuten war alles repariert . Wenn ich reich wäre, würde ich Ihnen einen Scheck über 10.000 € schicken - lol
Gwyneth Llewelyn
9

Für mich war der Fehler in DataTables selbst; Der Code zum Sortieren in DataTables 1.10.9 sucht nicht nach Grenzen. also wenn du so etwas benutzt

order: [[1, 'asc']]

Bei einer leeren Tabelle gibt es keine Zeilen-IDX 1 -> diese Ausnahme stellt sicher. Dies geschah, als die Daten für die Tabelle asynchron abgerufen wurden. Beim Laden der Seite wird die dataTable zunächst ohne Daten initialisiert. Es sollte später aktualisiert werden, sobald die Ergebnisdaten abgerufen wurden.

Meine Lösung:

// add within function _fnStringToCss( s ) in datatables.js
// directly after this line
// srcCol = nestedSort[i][0];

if(srcCol >= aoColumns.length) {
    continue;
}

// this line follows:
// aDataSort = aoColumns[ srcCol ].aDataSort;
Oliver Zendel
quelle
Vielen Dank für Ihre Ausarbeitung zu diesem Thema. @ hogarth45 oben hat das Problem / den Fehler korrekt identifiziert, war sich aber nicht so sicher , warum dies tatsächlich ein Problem war. Ich antworte Ihnen zwei Jahre später ... und anscheinend wurde dies nicht korrigiert, zumindest soweit ich weiß, nicht einmal in der offiziellen Dokumentation erwähnt.
Gwyneth Llewelyn
7

Ich hatte das gleiche Problem, die folgenden Änderungen lösten mein Problem.

$(document).ready(function() {
     $('.datatable').dataTable( {
            bSort: false,
            aoColumns: [ { sWidth: "45%" }, { sWidth: "45%" }, { sWidth: "10%", bSearchable: false, bSortable: false } ],
        "scrollY":        "200px",
        "scrollCollapse": true,
        "info":           true,
        "paging":         true
    } );
} );

Das aoColumnsArray beschreibt die Breite jeder Spalte und ihre sortableEigenschaften.

Eine andere Sache, um diesen Fehler zu erwähnen, wird auch angezeigt, wenn Sie nach einer Spaltennummer bestellen, die nicht existiert.

Abdul Manan
quelle
4

In meinem Fall hatte ich

$(`#my_table`).empty();

Wo es hätte sein sollen

$(`#my_table tbody`).empty();

Hinweis: In meinem Fall musste ich die Tabelle leeren, da ich Daten hatte, die ich wollte, bevor ich neue Daten einfügte.

Ich dachte nur daran zu teilen, wo es jemandem in Zukunft "helfen" könnte!

JumpingElephant
quelle
1

Ich hatte dieses Problem und es lag daran, dass ein anderes Skript alle Tabellen löschte und neu erstellte, aber meine Tabelle wurde nicht neu erstellt. Ich habe lange mit diesem Thema verbracht, bevor ich bemerkte, dass mein Tisch auf der Seite nicht einmal sichtbar war. Können Sie Ihre Tabelle sehen, bevor Sie DataTables initialisieren?

Im Wesentlichen machte das andere Skript:

let tables = $("table");
for (let i = 0; i < tables.length; i++) {
  const table = tables[i];
  if ($.fn.DataTable.isDataTable(table)) {
    $(table).DataTable().destroy(remove);
    $(table).empty();
  }
}

Und es hätte tun sollen:

let tables = $("table.some-class-only");
... the rest ...
Ryan Shillington
quelle
0

Sie müssen wegen der Analyse einfache Anführungszeichen [']in doppelte Anführungszeichen ["]ändern

Wenn Sie das Datenreihenfolgenattribut für die Tabelle verwenden, verwenden Sie es wie folgtdata-order='[[1, "asc"]]'

MohitGhodasara
quelle
-1

In meinem Fall habe ich das Problem gelöst, indem ich beim Anwenden der orderEigenschaft im Skript, in dem Sie die Datentabelle konfigurieren , eine gültige Spaltennummer festgelegt habe .

var table = $('#mytable').DataTable({
     .
     .
     .
     order: [[ 1, "desc" ]],
user13755332
quelle
Es gibt bereits andere Antworten, die im Grunde dasselbe sagen. Bitte versuchen Sie, redundante Antworten auf Fragen zu vermeiden, die Jahre alt sind.
16.