JQuery Datatables: Не вдається прочитати властивість 'aDataSort' з undefined


96

Я створив цю скрипку, і вона працює добре відповідно до моїх вимог: Скрипка

Однак, коли я використовую те саме в моїй програмі, на консолі браузера з'являється повідомлення про помилку " Не вдається прочитати властивість" aDataSort "" undefined "

У моїй програмі javascript читає приблизно так, як показано нижче: я перевірив вихід контролера ... він працює добре і надрукований на консолі.

$(document).ready(function() {

    $.getJSON("three.htm", function(data) {
             // console.log("loadDataTable >>  "+JSON.stringify(data));
             })
             .fail(function( jqxhr, textStatus, error ) {
             var err = textStatus + ', ' + error;
             alert(err);
             console.log( "Request Failed: " + err);
             })
             .success(function(data){
                 loadDataTable(data);
             });

    function loadDataTable(data){
         $("#recentSubscribers").dataTable().fnDestroy();    
         var oTable = $('#recentSubscribers').dataTable({
             "aaData" : JSON.parse(data.subscribers),
             "processing": true,
            "bPaginate": false,
            "bFilter": false,
            "bSort": false,
            "bInfo": false,
            "aoColumnDefs": [{
            "sTitle": "Subscriber ID",
            "aTargets": [0]
        }, {
            "sTitle": "Install Location",
            "aTargets": [1]
        }, {
            "sTitle": "Subscriber Name",
            "aTargets": [2]
        }, {
            "aTargets": [0], 
            "mRender": function (data, type, full) {
                return '<a style="text-decoration:none;" href="#" class="abc">' + data + '</a>';
            }
        }],
            "aoColumns": [{
            "mData": "code"
        }, {
            "mData": "acctNum"
        }, {
            "mData": "name"
        }]
            });

    }       

})

Переконайтеся, що код, який ви включили, такий самий, як скрипка (це не так) і той, який ви запускаєте. Також у скрипці у вас є два aTargets [0], перевірте: jsfiddle.net/gL0p0t42
Леандро

Ви не надаєте джерело, яке насправді називає "aDataSort".
Даніель

Ви маєте на увазі ідентифікатор таблиці html? Я подбав про це. Дозвольте мені спробувати мати одну ціль.
swateek

@Daniel the source - параметр функції loadDataTable ().
swateek

Відповіді:


131

Важливо, щоб THEAD не був порожнім у таблиці, оскільки dataTable вимагає вказати кількість стовпців очікуваних даних. Відповідно до ваших даних, це повинно бути

<table id="datatable">
    <thead>
        <tr>
            <th>Subscriber ID</th>
            <th>Install Location</th>
            <th>Subscriber Name</th>
            <th>some data</th>
        </tr>
    </thead>
</table>

26
Що робити, якщо у мене є вимога, яка передбачає налаштування стовпців та кількість зазначених стовпців під час виконання? Як я можу реалізувати код для вищезазначеної вимоги?
CS Lewis

Це допомогло мені усунути проблему з недрукованими даними. Ну, це також допомогло мені вилікувати ще одну мою проблему для таблиці даних, де я писав "Sort":false, тоді він зміг переглянути список у порядку зменшення, який надходив від контролера як Model.OrderByDescending(x=>x.Action==0).ThenBy(x=>x.Action).
Sorangwala Abbasali

2
<thead>повинен містити <tr>, то <th>S
brahimm

Це справедливо для стандартної таблиці даних (і вирішити мою проблему). RE: @CSLewis: Я не впевнений у статичних таблицях, але якщо ви налаштовуєте стовпці під час виконання поряд із запитом ajax, він не повинен мати нічого, <thead>але ви повинні визначити стовпці у вашій ініціації DataTable () таким чином: datatables .net / reference / option / columns.data
Харві Добсон,

61

Також мала цю проблему, цей масив вийшов за межі діапазону:

order: [1, 'asc'],

1
Цей мене завжди отримує. Чи є спосіб встановити за замовчуванням масив на 0, якщо масив виходить за межі діапазону?
JGreasley

6
@JGreasley Ви можете встановити його як порожній масив: order: []
hogarth45

2
Шахтні колони, де 5 і я вказували тут 7! Дякую
aiffin

1
Один! Тиждень! Один повний тиждень! І це 7-денний тиждень! І я майже впевнений, що я працював не з 9 до 5, більше як з 9 до півночі ... все це втрачено, бо я не знав про цю помилку !! Arrrrrrrrrrrgh !! ... Стільки часу витрачено даремно, мені стає глибоко соромно, я знову і знову шукав в Інтернеті і експериментував з усіма можливими рішеннями - жоден не наблизився б, щоб це «виправити». А потім ... випадково і вже зневірившись ... я натрапив на вашу відповідь, і та-да! За п’ять хвилин все було виправлено . Якби я був багатим, я б надіслав тобі чек на 10 тис. Євро - ха-ха
Гвінет Ллевелін

9

Для мене помилка була в самій таблиці даних; Код для сортування в DataTables 1.10.9 не буде перевіряти межі; таким чином, якщо ви використовуєте щось на зразок

order: [[1, 'asc']]

при порожній таблиці немає рядка idx 1 -> цей виняток забезпечує. Це сталося, оскільки дані для таблиці отримувались асинхронно. Спочатку при завантаженні сторінки dataTable ініціалізується без даних. Його слід оновити пізніше, як тільки отримані дані результатів.

Моє рішення:

// add within function _fnStringToCss( s ) in datatables.js
// directly after this line
// srcCol = nestedSort[i][0];

if(srcCol >= aoColumns.length) {
    continue;
}

// this line follows:
// aDataSort = aoColumns[ srcCol ].aDataSort;

Дякуємо за розробку цього питання; @ Hogarth45 вище визначили проблему / помилку , правильно, але не так ясно про те, чому це було, по суті, проблема. Я відповідаю вам через два роки ... і, мабуть, це не було виправлено, навіть не згадано в офіційній документації, принаймні, наскільки мені відомо.
Гвінет Левелін

7

Я зіткнувся з тією ж проблемою, наступні зміни вирішили мою проблему.

$(document).ready(function() {
     $('.datatable').dataTable( {
            bSort: false,
            aoColumns: [ { sWidth: "45%" }, { sWidth: "45%" }, { sWidth: "10%", bSearchable: false, bSortable: false } ],
        "scrollY":        "200px",
        "scrollCollapse": true,
        "info":           true,
        "paging":         true
    } );
} );

aoColumnsмасив описує ширину кожного стовпця і його sortableвластивості.

Інша річ, про яку слід згадати цю помилку, також з’явиться, коли ви впорядкуєте номер стовпця, який не існує.


4

У моєму випадку у мене було

$(`#my_table`).empty();

Де це мало бути

$(`#my_table tbody`).empty();

Примітка: у моєму випадку мені довелося спорожнити таблицю, оскільки перед вставкою нових даних у мене були дані, які я хотів.

Просто подумав поділитися тим, де це "може" допомогти комусь у майбутньому!


1

У мене була ця проблема, і це тому, що інший сценарій видаляв усі таблиці та відтворював їх, але моя таблиця не відтворювалася. Я витратив цілі віки на це питання, перш ніж помітив, що моєї таблиці навіть не було видно на сторінці. Чи можете ви побачити свою таблицю перед ініціалізацією таблиць даних?

По суті, робив інший сценарій:

let tables = $("table");
for (let i = 0; i < tables.length; i++) {
  const table = tables[i];
  if ($.fn.DataTable.isDataTable(table)) {
    $(table).DataTable().destroy(remove);
    $(table).empty();
  }
}

І це мало робити:

let tables = $("table.some-class-only");
... the rest ...

1

Вам потрібно замінити одинарні лапки [']на подвійні лапки ["]через синтаксичний розбір

якщо ви використовуєте атрибут порядку даних у таблиці, використовуйте його таким чиномdata-order='[[1, "asc"]]'


це не стосується питання ОП, але воно працює в моєму випадку (з використанням атрибутів даних html 5)
blackbiron

-1

У моєму випадку я вирішив проблему, встановивши дійсний номер стовпця під час застосування orderвластивості всередині сценарію, де ви налаштовуєте таблицю даних.

var table = $('#mytable').DataTable({
     .
     .
     .
     order: [[ 1, "desc" ]],

Вже є й інші відповіді, які говорять про те саме. Будь ласка, намагайтеся уникати зайвих відповідей на запитання, які давні.
thelr
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.