Подтвердить что ты не робот

Предупреждение DataTables: запрошенный неизвестный параметр '0' из источника данных для строки '0'

Кто-нибудь, пожалуйста, знайте, что не так с очень простым HTML файлом ниже?

enter image description here

Я просто пытаюсь использовать массив объектов в качестве источника данных для DataTables:

tests.html:

<html>
<head>
<link type="text/css" rel="stylesheet" href="#" onclick="location.href='https://ajax.googleapis.com/ajax/libs/jqueryui/1/themes/redmond/jquery-ui.css'; return false;">
<link type="text/css" rel="stylesheet" href="#" onclick="location.href='https://ajax.aspnetcdn.com/ajax/jquery.dataTables/1.9.2/css/jquery.dataTables_themeroller.css'; return false;">
<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: Хорошо, у меня есть ответ от автора для использования более новой версии DataTables или переименования mData в mDataProp

4b9b3361

Ответ 1

Вы используете массив объектов. Можете ли вы использовать вместо этого двумерный массив?

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

Смотрите это jsfiddle: http://jsfiddle.net/QhYse/

Я использовал такой массив, и он работал нормально:

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

Изменить, чтобы включить массив объектов

Возможное решение этого вопроса: jQuery DataTables fnrender с объектами

Этот jsfiddle http://jsfiddle.net/j2C7j/ использует массив объектов. Чтобы не получить ошибку, мне пришлось заполнить ее тремя пустыми значениями - я знаю, что это меньше, чем оптимально. Вы можете найти лучший способ с помощью fnRender, пожалуйста, напишите, если вы делаете.

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

Ответ 2

Для параметра null или undefined значение. Просто добавьте эту строку в атрибуты: ,"columnDefs": [ { "defaultContent": "-", "targets": "_all" } ]

Пример:

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

Ответ 3

Это мучило меня больше часа.

Если вы используете параметр dataSrc и столбец defs, убедитесь, что они находятся в правильных местах. В настройках ajax я вложил определения столбцов и потерял слишком много времени, чтобы понять это.

Это хорошо:

good

Это не хорошо:

enter image description here

Тонкая разница, но достаточно реальная, чтобы вызвать выпадение волос.

Ответ 4

У меня была такая же проблема. Оказывается, в моем случае я пропустил запятую после последней колонки. 30 минут моей жизни впустую, я никогда не вернусь!

enter image description here

Ответ 5

Убедитесь, что имена столбцов совпадают. Они чувствительны к регистру. Здесь, в моем случае, я получил эту ошибку, когда имена столбцов моей модели находятся в зашифрованном виде, и я использовал все строчные буквы в данных запроса ajax.

Итак, я решил, сопоставляя имена столбцов точно так же, как существующие имена моделей.

привязка DataTable

$("#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:

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

        }

Моя модель: -

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

так что здесь, в моем случае, iam заполняет данные с помощью столбцов (Name, Name, Id).. iam дублирует второе имя столбца для проверки.

Ответ 6

На веб-сайте DataTables:

Каждая ячейка в DataTables запрашивает данные и когда DataTables пытается получить данные для ячейки и не может этого сделать, это вызовет предупреждая, что данные недоступны там, где ожидалось быть. Предупреждающее сообщение:

Предупреждение DataTables: таблица id = {id} - запрошенный неизвестный параметр '{parameter}' для строки {row-index}

где:

{id} заменяется идентификатором DOM таблицы, который вызвал ошибку

{parameter} - это имя параметра данных. DataTables запрашивает

{row-index} - индекс внутренней строки DataTables для rwo, вызвавший ошибку.

Итак, чтобы разбить его, DataTables запросил данные для данной строки, {parameter}, и там нет данных, или это null или undefined.

Дополнительную информацию см. в техническом примечании на веб-сайте DataTables.

Ответ 7

Я столкнулся с этой проблемой, потому что я испортил return keyword в custom rendering в Columns 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
          },
     ......
    }

проблема в моем коде заключается в том, что я messed return keyword в else clause

поэтому я изменил его на

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

Ответ 8

Это очень распространенный случай в DataTables, когда он не может найти определенное поле запроса в конфигурации DataTable.
Например:

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

Здесь, если DataTable не получает вышеупомянутые свойства. Это сгенерирует это предупреждение:

Предупреждение DataTables: запрошенный неизвестный параметр '0' из источника данных для строки '0'

Чтобы преодолеть это, вам просто нужно установить значение по умолчанию в "aoColumns"

Например:

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

sDefaultContent подавит предупреждение.
Примечание. Это свойство может быть изменено в зависимости от используемой вами версии dataTables.

Ответ 9

Если вы используете knockout.bindings.dataTables.js вы можете отредактировать файл и заменить эту строку

dataTable.fnAddData(unwrappedItems);

с

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

Это помогло мне, и я надеюсь, что поможет вам.

Ответ 10

В моем странном сценарии у меня был другой столбец, который не всегда возвращал значение в функции "render". return null решил мою проблему.

Ответ 11

Если кто-то использует новые DataTables (что удивительно), и вы хотите использовать массив объектов, вы можете легко сделать это с помощью опции столбцов. Обратитесь к следующей ссылке для превосходного примера по этому вопросу.

DataTables с массивом объектов

Я боролся с этим в течение прошлых 2 дней, и это решило это. Я не хотел переключаться на многомерные массивы по другим причинам кода, поэтому искал такое решение.

Ответ 12

В моем случае у меня была заглавная буква "C" для опций столбцов в настройках данных. Потрачено 2 часа, чтобы понять это !!!!

"ajax": {
            "url": "URL",
            "type": "GET",
            "contentType": "application/json",
            "data": function (d) {
                return {
                    id: Id
                };
            },
            "dataSrc": ""
        },
        "columns": [
            {
                data: 'field1'
            },
            {
                data: 'field2'
            }
        ],
        "columnDefs": [{
                "targets": [-1, -2],
                "orderable": false
            },
            {
                "defaultContent": "-",
                "targets": "_all"
            }],
            "order": [[0, "asc"]]