DataTables-waarschuwing: onbekende parameter ‘0’ opgevraagd uit de gegevensbron voor rij ‘0’

Weet iemand alsjeblieft wat er mis is met het zeer eenvoudige HTML-bestand hieronder?

Ik probeer gewoon een array van objectente gebruiken als de gegevensbron voor DataTables:

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, ik heb het antwoord van de auteur om een ​​nieuwere versie van DataTables te gebruiken of de naam van mData te wijzigen in mDataProp


Antwoord 1, autoriteit 100%

Voor nullof undefined valuefout, voeg gewoon deze regel toe aan attributen: ,columnDefs: [ { "defaultContent": "-", "targets": "_all" } ]

Voorbeeld:

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

Snippet uitvouwen


Antwoord 2, autoriteit 22%

U gebruikt een reeks objecten. Kun je in plaats daarvan een tweedimensionale array gebruiken?

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

Bekijk deze jsfiddle: http://jsfiddle.net/QhYse/

Ik heb een array als deze gebruikt en het werkte prima:

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",[]]
];

Bewerken om een ​​reeks objecten op te nemen

Er is een mogelijke oplossing voor deze vraag: jQuery DataTables fnrender met objecten

Deze jsfiddle http://jsfiddle.net/j2C7j/gebruikt een reeks objecten. Om de fout niet te krijgen, moest ik het opvullen met 3 lege waarden – minder dan optimaal, ik weet het. Misschien vind je een betere manier met fnRender, post als je dat doet.

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

Antwoord 3, autoriteit 10%

Dit plaagde me meer dan een uur.

Als je de dataSrc-optie en de kolomdefs-optie gebruikt, zorg er dan voor dat ze op de juiste locaties staan. Ik had kolomdefs genest in de ajax-instellingen en verloor veel te veel tijd om dat uit te zoeken.

Dit is goed:

Dit is niet goed:

Subtiel verschil, maar echt genoeg om haaruitval te veroorzaken.


Antwoord 4, autoriteit 8%

Ik had hetzelfde probleem. Blijkt dat ik in mijn geval de komma miste na de laatste kolom. 30 minuten van mijn leven verspild, ik krijg het nooit meer terug!


Antwoord 5, autoriteit 3%

Zorg ervoor dat de kolomnamen hetzelfde zijn. Ze zijn hoofdlettergevoelig. Hier, in mijn geval, kreeg ik deze fout wanneer de kolomnamen van mijn model in hoofdletters zijn en ik alle kleine letters in de gegevens van ajax-verzoek heb gebruikt.

Dus ik heb dit opgelost door de kolomnamen precies op dezelfde manier te matchen als de bestaande modelnamen.

DataTable Binding

$("#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();
        }

Mijn model:-

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

Dus hier in mijn geval, IAM POPULERING DataTable met kolommen (naam, naam, ID) .. IAM dupliceren de tweede kolomnaam om te testen.


6, Autoriteit 2%

Vanaf databekken Website:

Elke cel in datatables vraagt ​​gegevens aan en wanneer datatables probeert
Gegevens voor een cel verkrijgen en kan dit niet doen, het zal een activeren
Waarschuwing, vertel u dat gegevens niet beschikbaar zijn waar het werd verwacht
zijn. Het waarschuwingsbericht is:

DataTables WAARSCHUWING: TABEL ID = {id}– Gevraagde onbekende parameter
{parameter}‘ voor rij {row-index}

Waar:

{id}wordt vervangen door de DOM-ID van de tabel die de fout

heeft geactiveerd

{parameter}is de naam van de Data Parameter DataTables is verzocht

{row-index}is de interne rij-index van de datutables voor de RWO die de fout heeft geactiveerd.

Dus om het af te breken, heeft datatables de gegevens voor een bepaalde rij gevraagd, van
De {parameter}verstrekt en er is geen gegevens, of het is nullof
undefined.

Zie deze Tech notitie op DataTables Web Site voor meer informatie.


7, Autoriteit 2%

In mijn rare scenario had ik een anders kolom die niet altijd een waarde in de ‘render’-functie retourneerde. nullRETOURNEREN OP MIJN WERKING.


8

Als iemand de nieuwe datatables gebruikt (die Awesome BTW is) en een reeks objecten willen gebruiken, kunt u dit gemakkelijk doen met de optie Columns. Raadpleeg de volgende link voor een uitstekend voorbeeld hierover.

DataTables met array van objecten

Ik worstelde hier de afgelopen 2 dagen mee en dit loste het op. Ik wilde om andere coderedenen niet overschakelen naar multidimensionale arrays, dus ik was op zoek naar een oplossing als deze.


Antwoord 9

Als u knockout.bindings.dataTables.jsgebruikt, kunt u het bestand bewerken en deze regel vervangen

dataTable.fnAddData(unwrappedItems);

met

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

Dit heeft me geholpen en ik hoop dat het je zal helpen.

Other episodes