JQuery Datatables: Tidak dapat membaca properti 'aDataSort' tidak terdefinisi


99

Saya membuat biola ini dan bekerja dengan baik sesuai kebutuhan saya: Biola

Namun, ketika saya menggunakan yang sama di aplikasi saya, saya mendapatkan kesalahan di konsol browser yang mengatakan Tidak dapat membaca properti 'aDataSort' dari tidak ditentukan

Dalam aplikasi saya, javascript membaca sesuatu seperti di bawah ini: Saya telah memeriksa keluaran pengontrol ... itu berfungsi dengan baik dan dicetak di konsol juga.

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

    }       

})

Harap pastikan bahwa kode yang Anda masukkan sama dengan biola (bukan) dan yang Anda jalankan. Juga di biola Anda memiliki dua aTarget [0], periksa: jsfiddle.net/gL0p0t42
Leandro Carracedo

Anda tidak memberikan sumber yang sebenarnya memanggil "aDataSort".
Daniel

Apakah yang Anda maksud id tabel html? Saya sudah mengurusnya. Biar saya coba dengan satu target.
swateek


1
Saya memiliki masalah yang sama, dan saya menemukan bahwa saya memesan dengan nomor kolom yang tidak ada .. saya hanya punya 3 cols tetapi saya memesan dengan yang kelima.
Hos Mercury

Jawaban:


137

Penting agar THEAD Anda tidak kosong dalam tabel. Karena dataTable mengharuskan Anda menentukan jumlah kolom dari data yang diharapkan. Sesuai data Anda, seharusnya

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

30
Bagaimana jika saya memiliki persyaratan yang melibatkan konfigurasi kolom dan jumlah kolom tersebut di Runtime? Bagaimana cara menerapkan kode untuk persyaratan yang disebutkan di atas?
CS Lewis

Ini membantu saya mengatasi masalah data yang tidak dicetak. Yah itu juga membantu saya untuk menyembuhkan satu lagi masalah saya untuk datatable di mana saya menulis "Sort":false, kemudian dapat melihat daftar dalam urutan menurun yang berasal dari controller sebagai Model.OrderByDescending(x=>x.Action==0).ThenBy(x=>x.Action).
Sorangwala Abbasali

2
yang <thead>harus berisi <tr>, kemudian <th>s
brahimm

Ini berlaku untuk DataTable standar (dan selesaikan masalah saya). RE: @CSLewis: Saya tidak yakin dengan tabel statis, tetapi jika Anda mengonfigurasi kolom saat runtime bersamaan dengan permintaan ajax, Anda tidak perlu memasukkan apa pun <thead>tetapi Anda harus menentukan kolom dalam inisiasi DataTable () seperti ini: datatables .net / reference / option / columns.data
Harvey Dobson

64

Juga memiliki masalah ini, Larik ini berada di luar jangkauan:

order: [1, 'asc'],

1
Yang ini selalu membuatku. Apakah ada cara untuk default array ke 0, jika array di luar jangkauan?
JGreasley

6
@JGreasley Anda dapat mengaturnya sebagai array kosong: order: []
hogarth45

2
Tambang kolom di mana 5 dan saya menentukan 7 di sini! Terima kasih
aiffin

1
Satu! Minggu! Satu minggu penuh! Dan itu adalah seminggu 7 hari! Dan saya cukup yakin bahwa saya tidak bekerja 9-to-5, lebih seperti 9-to-tengah malam ... semua itu hilang karena saya tidak tahu tentang bug ini !! Arrrrrrrrrrrgh !! ... Begitu banyak waktu yang terbuang, saya merasa sangat malu, saya mencari di Internet berulang kali dan bereksperimen dengan semua solusi yang mungkin - tidak ada yang mendekati untuk 'memperbaiki' ini. Dan kemudian ... secara kebetulan dan sudah putus asa ... Aku menemukan jawabanmu, dan ta-da! Dalam lima menit, semuanya sudah diperbaiki . Jika saya kaya, saya akan mengirimi Anda cek sebesar € 10K - lol
Gwyneth Llewelyn

9

Bagi saya, bug itu ada di DataTables itu sendiri; Kode untuk menyortir dalam DataTables 1.10.9 tidak akan memeriksa batas; jadi jika Anda menggunakan sesuatu seperti

order: [[1, 'asc']]

dengan tabel kosong, tidak ada baris idx 1 -> pengecualian ini memastikan. Ini terjadi karena data untuk tabel diambil secara asinkron. Awalnya, saat memuat halaman, dataTable diinisialisasi tanpa data. Ini harus diperbarui nanti segera setelah data hasil diambil.

Solusi saya:

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

Terima kasih atas penjelasan Anda tentang masalah ini; @ hogarth45 di atas mengidentifikasi masalah / bug dengan benar, tetapi tidak begitu jelas mengapa hal ini sebenarnya menjadi masalah. Saya menjawab Anda dua tahun kemudian ... dan tampaknya ini belum diperbaiki, bahkan tidak disebutkan dalam dokumentasi resmi, setidaknya, sejauh yang saya tahu.
Gwyneth Llewelyn

7

Saya menghadapi masalah yang sama, perubahan berikut menyelesaikan masalah saya.

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

yang aoColumnsarray yang menggambarkan lebar setiap kolom dan yang sortablesifat.

Hal lain lagi kesalahan ini juga akan muncul ketika Anda memesan dengan nomor kolom yang tidak ada.


4

Dalam kasus saya, saya punya

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

Dimana seharusnya

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

Catatan: dalam kasus saya, saya harus mengosongkan tabel karena saya memiliki data yang saya inginkan sebelum memasukkan data baru.

Hanya berpikir untuk berbagi di mana itu "mungkin" membantu seseorang di masa depan!


1

Saya mengalami masalah ini dan itu karena skrip lain menghapus semua tabel dan membuatnya kembali, tetapi tabel saya tidak dibuat ulang. Saya menghabiskan waktu lama untuk masalah ini sebelum saya menyadari bahwa meja saya bahkan tidak terlihat di halaman. Dapatkah Anda melihat tabel Anda sebelum Anda menginisialisasi DataTables?

Pada dasarnya, skrip lain melakukan:

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

Dan itu seharusnya melakukan:

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

1

Anda perlu mengganti tanda kutip tunggal [']menjadi tanda kutip ganda["] karena parse

jika Anda menggunakan atribut data-order pada tabel maka gunakan seperti inidata-order='[[1, "asc"]]'


itu tidak relevan dengan pertanyaan OP tetapi berfungsi pada kasus saya (menggunakan atribut data html 5)
blackbiron

0

Dalam kasus saya, saya memecahkan masalah dengan menetapkan nomor kolom yang valid saat menerapkan orderproperti di dalam skrip tempat Anda mengonfigurasi tabel data.

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

Sudah ada jawaban lain yang pada dasarnya mengatakan hal yang sama. Harap coba untuk menghindari jawaban yang berlebihan pada pertanyaan yang sudah bertahun-tahun.
thelr
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.