it-swarm.com.de

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

Weiß jemand bitte, was mit der sehr einfachen HTML-Datei unten nicht stimmt?

enter image description here

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 um eine neuere Version von DataTables zu verwenden oder mData in mDataProp umzubenennen

60

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

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

Siehe dieses 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 aufzunehmen

Es gibt eine mögliche Lösung aus dieser Frage: jQuery DataTables fnrender mit Objekten

Dieses jsfiddle http://jsfiddle.net/j2C7j/ verwendet ein Array von Objekten. Um den Fehler nicht zu erhalten, musste ich ihn mit 3 Blindwerten auffüllen - weniger als optimal, weiß ich. Mit fnRender finden Sie möglicherweise einen besseren Weg. Bitte schreiben 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 } }
                ]
        });
});

Fürnulloderundefined valueerror, fügen Sie einfach diese Zeile zu Attributen hinzu: ,"columnDefs": [ { "defaultContent": "-", "targets": "_all" } ]

Beispiel: 

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

Das Benachrichtigungsfeld wird nicht erneut angezeigt. Leere Werte werden durch die von Ihnen angegebenen Werte ersetzt.

61
Ananth

Das plagte mich über eine Stunde lang.

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

Das ist gut:

 good

Das ist nicht gut: 

 enter image description here

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

9
zerpsed

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

enter image description here

5
Flea

Stellen Sie sicher, dass die Spaltennamen gleich sind. Sie sind case sensitive. In meinem Fall habe ich diesen Fehler erhalten, wenn die Spaltennamen meines Modells in Großbuchstaben geschrieben wurden und ich alle Kleinbuchstaben in den Daten von Ajax Request verwendet habe.

Also habe ich die Spaltennamen genau wie die vorhandenen Modellnamen abgeglichen.

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 datat mit Spalten (Name, Name, Id). Ich dupliziere den zweiten Spaltennamen, um ihn zu testen.

4
Krishna

Von der DataTables-Website:

Jede Zelle in DataTables fordert Daten an, und wenn DataTables versucht, Wenn Sie Daten für eine Zelle abrufen und dies nicht tun können, wird eine .__ ausgelöst. Warnung, die Ihnen mitteilt, dass die Daten nicht dort verfügbar sind, wo sie erwartet wurden sein. Die Warnmeldung lautet:

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

woher:

{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 den Datenträger, der den Fehler ausgelöst hat.

Um es aufzuschlüsseln, hat DataTables Daten für eine bestimmte Zeile von .__ angefordert. Der {parameter} wird bereitgestellt und es sind keine Daten dort oder es ist null oder undefined.

Weitere Informationen finden Sie in diesem tech note auf der DataTables-Website.

2
Gyrocode.com

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;"
                            }
            }];

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 umgehen, müssen Sie einfach 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 je nach Version der verwendeten Datentabellen geändert werden.

2
mohit sharma

Ich stehe vor diesem Problem, weil ich return keyword in custom rendering in Columns section eingegeben habe.

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 liegt darin, dass ich messed den Return keyword im else clause

also habe ich es geändert 

....
else return row.LetterStatusID.toString();// messed return keyword added
.....
2

In meinem seltsamen Szenario hatte ich eine different - Spalte, die nicht immer einen Wert in der 'Rendern'-Funktion zurückgab. return null hat mein Problem gelöst.

1
Stachu

Wenn Sie knockout.bindings.dataTables.js verwenden, 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.

1
Suraj Sharma

Wenn jemand die neuen DataTables verwendet (was übrigens super ist) und ein Array von Objekten verwenden möchte, können Sie dies mit der column-Option problemlos tun. Ein ausgezeichnetes Beispiel hierzu finden Sie unter dem folgenden Link.

DataTables mit Array von Objekten

Ich hatte die letzten 2 Tage damit zu kämpfen und dieses Problem wurde gelöst. Ich wollte aus anderen Codegründen nicht auf mehrdimensionale Arrays umstellen, deshalb suchte ich nach einer Lösung wie dieser.

0
impiyush