DataTables-Warnung: Unbekannter Parameter '0' von der Datenquelle für Zeile '0' angefordert.

68

Weiß jemand bitte, was mit der sehr einfachen HTML-Datei unten falsch ist?

Geben Sie hier die Bildbeschreibung ein

Ich versuche nur, ein Array von Objekten als Datenquelle für DataTables zu verwenden:

tests.html:

<html>
<head>
<link type="text/css" rel="stylesheet" href="https://ajax.googleapis.com/ajax/libs/jqueryui/1/themes/redmond/jquery-ui.css">
<link type="text/css" rel="stylesheet" href="https://ajax.aspnetcdn.com/ajax/jquery.dataTables/1.9.2/css/jquery.dataTables_themeroller.css">
<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js"></script>
<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jqueryui/1/jquery-ui.min.js"></script>
<script type="text/javascript" src="https://ajax.aspnetcdn.com/ajax/jquery.dataTables/1.9.2/jquery.dataTables.min.js"></script>
<script type="text/javascript">

var data = [
    {"Name":"UpdateBootProfile","Result":"PASS","ExecutionTime":"00:00:00","Measurement":[]},
    {"Name":"NRB Boot","Result":"PASS","ExecutionTime":"00:00:50.5000000","Measurement":[{"TestName":"TOTAL_TURN_ON_TIME","Result":"PASS","Value":"50.5","LowerLimit":"NaN","UpperLimit":"NaN","ComparisonType":"nctLOG","Units":"SECONDS"}]},
    {"Name":"NvMgrCommit","Result":"PASS","ExecutionTime":"00:00:00","Measurement":[]},
    {"Name":"SyncNvToEFS","Result":"PASS","ExecutionTime":"00:00:01.2500000","Measurement":[]}
];

$(function() {
        var testsTable = $('#tests').dataTable({
                bJQueryUI: true,
                aaData: data,
                aoColumns: [
                        { mData: 'Name' },
                        { mData: 'Result' },
                        { mData: 'ExecutionTime' }
                ]
        });
});

</script>
</head>
<body>

<table id="tests">
<thead>
<tr>
<th>Name</th>
<th>Result</th>
<th>ExecutionTime</th>
</tr>
</thead>
<tbody>
</tbody>
</table>

</body>
</html>

UPDATE: Ok, ich habe die Antwort vom Autor erhalten , eine neuere Version von DataTables zu verwenden oder mData in mDataProp umzubenennen

Alexander Farber
quelle
2
Ich habe auch die falsche Version verwendet. Vielen Dank.
Sridhar Sarnobat
Versuchen Sie, die angeben , Spalten Parameter während der Datentabelle zu initialisieren. Referenz: datatables.net/reference/option/columns.data#Examples
Shasi kanth

Antworten:

27

Sie verwenden eine Reihe von Objekten. Können Sie stattdessen ein zweidimensionales Array verwenden?

http://www.datatables.net/examples/data_sources/js_array.html

Siehe diese jsfiddle: http://jsfiddle.net/QhYse/

Ich habe ein Array wie dieses verwendet und es hat gut funktioniert:

var data = [
    ["UpdateBootProfile","PASS","00:00:00",[]] ,
    ["NRB Boot","PASS","00:00:50.5000000",[{"TestName":"TOTAL_TURN_ON_TIME","Result":"PASS","Value":"50.5","LowerLimit":"NaN","UpperLimit":"NaN","ComparisonType":"nctLOG","Units":"SECONDS"}]] ,
    ["NvMgrCommit","PASS","00:00:00",[]] ,
    ["SyncNvToEFS","PASS","00:00:01.2500000",[]]
];

Bearbeiten, um ein Array von Objekten einzuschließen

Es gibt eine mögliche Lösung für diese Frage: jQuery DataTables wird mit Objekten gerendert

Diese jsfiddle http://jsfiddle.net/j2C7j/ verwendet ein Array von Objekten. Um den Fehler nicht zu bekommen, musste ich ihn mit 3 leeren Werten auffüllen - weniger als optimal, ich weiß. Möglicherweise finden Sie einen besseren Weg mit fnRender. Bitte posten Sie, wenn Sie dies tun.

var data = [
   ["","","", {"Name":"UpdateBootProfile","Result":"PASS","ExecutionTime":"00:00:00","Measurement":[]} ]

];

$(function() {
        var testsTable = $('#tests').dataTable({
                bJQueryUI: true,
                aaData: data,
                aoColumns: [
                        { mData: 'Name', "fnRender": function( oObj ) { return oObj.aData[3].Name}},
                        { mData: 'Result' ,"fnRender": function( oObj ) { return oObj.aData[3].Result }},
                        { mData: 'ExecutionTime',"fnRender": function( oObj ) { return oObj.aData[3].ExecutionTime } }
                ]
        });
});
Bumptious Q Bangwhistle
quelle
1
Danke +1, aber ich möchte eine Reihe von Objekten verwenden, da ich einige Funktionen später hinzufügen möchte ...
Alexander Farber
2
Danke für die Abstimmung. Ich habe die Antwort so geändert, dass sie ein Array von Objekten enthält. Leider müssen drei Leerzeichen aufgefüllt werden, sonst beschwert sich DataTables immer noch.
Bumptious Q Bangwhistle
92

Fügen Sie für Null- oder undefinierte Wertefehler einfach diese Zeile zu den Attributen hinzu:,"columnDefs": [ { "defaultContent": "-", "targets": "_all" } ]

Beispiel:

oTable = $("#bigtable").dataTable({
  "columnDefs": [{
    "defaultContent": "-",
    "targets": "_all"
  }]
});

Das Warnfeld wird nicht mehr angezeigt. Leere Werte werden durch die von Ihnen angegebenen Werte ersetzt.

Ananth
quelle
1
Ich habe diese Lösung verwendet, aber ohne die Anführungszeichen um "columnDefs". Es hat super funktioniert, danke !!
Carlos Pérez Chávez
Sme hier !! Die neueste Version erfordert keine Anführungszeichen um die Eigenschaftsnamen, falls jemand das gleiche Problem hat. Ich wünschte, ich hätte das früher gesehen, vielen Dank !!
Quintessa Anderson
11

Das plagte mich über eine Stunde lang.

Wenn Sie die Option dataSrc und die Option column defs verwenden, stellen Sie sicher, dass sie sich an den richtigen Positionen befinden. Ich hatte verschachtelte Spaltendefekte in den Ajax-Einstellungen und verlor viel zu viel Zeit, um das herauszufinden.

Das ist gut:

gut

Das ist nicht gut:

Geben Sie hier die Bildbeschreibung ein

Subtiler Unterschied, aber real genug, um Haarausfall zu verursachen.

zerpsed
quelle
1
@qwertzman sorry !! Ich war eine Stunde hinter meiner Arbeit zurück und wollte so schnell wie möglich wieder arbeiten, wollte aber auch meine Erkenntnisse hinterlassen, um anderen die Stunde zu ersparen. Ich habe den einfachen Ausweg genommen.
Zerpsed
10

Ich hatte das gleiche Problem. In meinem Fall stellte sich heraus, dass mir das Komma nach der letzten Spalte fehlte. 30 Minuten meines Lebens verschwendet, ich werde nie zurückkommen!

Geben Sie hier die Bildbeschreibung ein

Floh
quelle
3
aber was ist Lösung?
ImBhavin95
1
@ImBS - Ich hatte kein Komma; Ich musste das Komma am Ende der letzten Klammer einfügen.
Floh
2
Das Hinzufügen dieser Spaltenentwickler hat mein Problem behoben!
WtFudgE
columnDefs hat es für mich gelöst. Finden Sie heraus, warum die Beispiele auf DataTables.net das nicht benötigen.
MetalMikester
4

Stellen Sie sicher, dass die Spaltennamen identisch sind. Sie unterscheiden zwischen Groß- und Kleinschreibung. In meinem Fall habe ich diesen Fehler erhalten, wenn die Spaltennamen meines Modells in Großbuchstaben geschrieben sind und ich alle Kleinbuchstaben in den Daten der Ajax-Anfrage verwendet habe.

Also habe ich gelöst, indem ich die Spaltennamen genauso abgeglichen habe wie die vorhandenen Modellnamen.

DataTable-Bindung

$("#Customers").DataTable({
            ajax: {
                url: "/api/customers/",
                dataSrc: ""
            },
            columns: [
                {
                    data: "Name",
                    render: function (data, type, customer) {
                        return "<a href='/customers/edit/" + customer.Id + "'>" + customer.Name + "</a>";


                    }

                },
                {
                    data: "Name"
                },
                {
                    data: "Id",
                    render: function (data) {
                        return "<button class='btn-link js-delete' data-customer-id=" + data + ">Delete</button>";
                    }
                }
            ]
        });

Web-API-Methode:

  public IEnumerable<Customer> GetCustomers()
        {
            return _context.Customers.ToList();

        }

Mein Modell:-

 public class Customer
    {
        public int Id { get; set; }

        [Required]
        [StringLength(255)]
        public string Name { get; set; }        

        [Display(Name="Date Of Birth")]        
        public DateTime? BirthDate { get; set; }


        public bool isSubscribedToNewsLetter { get; set; }

        public MembershipType MembershipType { get; set; }

        [Display(Name="Membership Type")]
        [Required]
        public byte MembershipTypeId { get; set; }
    }

In meinem Fall fülle ich also Daten mit Spalten (Name, Name, ID). Ich dupliziere den zweiten zu testenden Spaltennamen.

Krishna
quelle
1
Beachten Sie auch, dass Sie möglicherweise den Kamelfall für Ihre Web-API aktiviert haben.
Jean Jimenez
Bingo war in meinem Fall das Problem mit dem Kamelkoffer. Vielen Dank, dass Sie @JeanJimenez
Bangbang
2

Von der DataTables-Website:

Jede Zelle in DataTables fordert Daten an. Wenn DataTables versucht, Daten für eine Zelle abzurufen, und dies nicht kann, wird eine Warnung ausgelöst, die Sie darüber informiert, dass Daten nicht dort verfügbar sind, wo sie erwartet wurden. Die Warnmeldung lautet:

DataTables-Warnung: table id = {id}- Angeforderter unbekannter Parameter ' {parameter}' für Zeile{row-index}

wo:

{id} wird durch die DOM-ID der Tabelle ersetzt, die den Fehler ausgelöst hat

{parameter} ist der Name des Datenparameters, den DataTables anfordert

{row-index} ist der interne Zeilenindex von DataTables für die rwo, die den Fehler ausgelöst hat.

Um es aufzuschlüsseln, hat DataTables Daten für eine bestimmte Zeile der angefordert {parameter} bereitgestellten und es sind dort keine Daten vorhanden, oder es ist nulloder undefined.

Weitere Informationen finden Sie in diesem technischen Hinweis auf der DataTables-Website.

Gyrocode.com
quelle
2

Ich Gesicht dieses Problem , weil ich messed return keywordin custom renderinginColumns section

columns: [
    {....
        'data': function(row, type, val, meta) {
            if (row.LetterStatus)
                 return '@CultureHelper.GetCurrentCulture()' == 'ar'? row.LetterStatus.NameInArabic: row.LetterStatus.NameInEnglish;
            else row.LetterStatusID.toString();// here is the problem because I messed the Return key keyword
          },
     ......
    }

Das Problem in meinem Code ist, dass ich messeddie Return keywordin derelse clause

also habe ich es geändert in

....
else return row.LetterStatusID.toString();// messed return keyword added
.....
Basheer AL-MOMANI
quelle
Ich bin mir nicht sicher, warum ihr -1 gegeben habt. Ich hatte das gleiche Problem. Das hat mir geholfen, danke zu sagen!
Vladimir Bozic
2

Dies ist ein sehr häufiger Fall in DataTables, wenn das in der DataTable-Konfiguration definierte Anforderungsfeld nicht gefunden werden kann.
Zum Beispiel:

                "aoColumns": [{
                    mData: 'mobile', sWidth: "149px;"
               }, {
                    mData: 'name', sWidth: "121px;"
               }, {
                    mData: 'productName', sWidth: "116px;"
                            }
            }];

Hier, wenn DataTable die oben genannten Eigenschaften nicht erhält. Es wird diese Warnung generiert:

DataTables-Warnung: Unbekannter Parameter '0' aus der Datenquelle für Zeile '0' angefordert.

Um dies zu überwinden, müssen Sie nur einen Standardwert in "aoColumns" festlegen.

Zum Beispiel:

  "aoColumns": [{
                mData: 'mobile',sDefaultContent :  '',sWidth: "149px;"
           }, {
                mData: 'name',sDefaultContent :  '', sWidth: "121px;"
           }, {
                mData: 'productName',sDefaultContent :  '', sWidth: "116px;"
              }
        }];

sDefaultContent unterdrückt die Warnung.
Hinweis: Diese Eigenschaft kann basierend auf der Version der von Ihnen verwendeten dataTables geändert werden.

Mohit Sharma
quelle
1

In meinem seltsamen Szenario hatte ich eine andere Spalte, die nicht immer einen Wert in der Funktion 'Rendern' zurückgab. return nulllöste mein Problem.

Stachu
quelle
1

Wenn jemand die neuen DataTables verwendet (was übrigens fantastisch ist) und ein Array von Objekten verwenden möchte, können Sie dies einfach mit der Spaltenoption tun. Unter dem folgenden Link finden Sie ein hervorragendes Beispiel dafür.

DataTables mit Array von Objekten

Ich hatte in den letzten 2 Tagen damit zu kämpfen und das hat es gelöst. Ich wollte aus anderen Codegründen nicht auf mehrdimensionale Arrays umsteigen und suchte nach einer solchen Lösung.

impiyush
quelle
Sie haben festgestellt, dass DataTables fantastisch ist (da stimme ich zu), einen Link zu einem der offiziellen Beispiele hinzugefügt und uns mitgeteilt, wie viele Tage Sie Probleme hatten. Aber wie beantwortet das meine Frage?
Alexander Farber
Wenn Sie auf den Link zugreifen würden, hätten Sie genau herausgefunden, wie Sie ein Array von Objekten mit der neuen DataTable korrekt verwenden können. Das Beispiel auf dem Link zeigt, wie genau dies mithilfe der Spalten- und Dateneigenschaften erfolgt. Entschuldigung, aber diese Seite wurde erstellt, um zu helfen, nicht um den genauen Code für jemanden zu schreiben !!
Impiyush
1

Wenn Sie verwenden knockout.bindings.dataTables.js, können Sie die Datei bearbeiten und diese Zeile ersetzen

dataTable.fnAddData(unwrappedItems);

mit

if (unwrappedItems.length > 0) {
    dataTable.fnAddData(unwrappedItems);
}

Das hat mir geholfen und ich hoffe, es wird Ihnen helfen.

Suraj Sharma
quelle