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


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

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

тесты.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>

обновление: Ок, я получил ответ от автора чтобы использовать более новую версию DataTables или переименовать mData в mDataProp

11 57

11 ответов:

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

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/ использует массив объектов. Чтобы не получить ошибку, мне пришлось заполнить ее 3 пустыми значениями-менее оптимальными, я знаю. Вы можете найти лучший способ с 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 } }
                ]
        });
});

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

пример :

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

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

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

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

Это хорошо:

good

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

enter image description here

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

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

enter image description here

убедитесь, что имена столбцов совпадают. Они чувствительны к регистру. Здесь, в моем случае, я получил эту ошибку, когда имена столбцов моей модели указаны с большой буквы, и я использовал все строчные буквы в данных запроса 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; }
    }

поэтому здесь, в моем случае,я заполняю datatable столбцами(Name,Name, Id).. IAM дублирует имя второго столбца для тестирования.

С сайта DataTables:

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

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

где:

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

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

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

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

посмотреть этот tech Примечание на веб-сайте DataTables для получения дополнительной информации.

я столкнулся с этой проблемой, потому что я перепутал 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 the Return keyword на else clause

поэтому я изменил его, чтобы

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

Это очень распространенный случай в DataTables, когда он не может найти поле запроса define в конфигурации 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 подавит предупреждение.
Примечание: это свойство может быть изменено в зависимости от версии используемых таблиц данных.

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

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

dataTable.fnAddData(unwrappedItems);

С

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

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

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

Таблицы данных с массивом объектов

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