JQuery Datatables : 정의되지 않은 'aDataSort'속성을 읽을 수 없습니다.


99

나는이 바이올린을 만들고 내 요구 사항에 따라 잘 작동 : 바이올린을

그러나 내 응용 프로그램에서 동일한 것을 사용할 때 브라우저 콘솔에서 Cannot read property 'aDataSort'of undefined 라는 오류가 발생합니다.

내 응용 프로그램에서 자바 스크립트는 다음과 같이 읽습니다. 컨트롤러 출력을 확인했습니다 ... 잘 작동하며 콘솔에도 인쇄됩니다.

$(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
— Leandro Carracedo

실제로 "aDataSort"를 호출하는 소스를 제공하지 않습니다.
— Daniel

html 테이블의 ID를 의미합니까? 내가 처리했습니다. 하나의 목표를 가지고 시도해 보겠습니다.
— swateek


1
나는 똑같은 문제가 있었고, 나는 존재하지 않는 열 번호로 주문한다는 것을 알았다. 나는 3 개의 열만 가지고 있었지만 다섯 번째로 주문했다.
— Hos Mercury

답변:


137

테이블에서 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>

29
런타임시 열 및 해당 열 수 구성과 관련된 요구 사항이있는 경우 어떻게합니까? 앞서 언급 한 요구 사항에 대한 코드를 어떻게 구현할 수 있습니까?
— CS Lewis

이것은 인쇄되지 않은 데이터 문제를 해결하는 데 도움이되었습니다. 글쎄 그것은 또한 내가 쓴 데이터 테이블에 대한 내 문제를 하나 더 해결하는 데 도움 "Sort":false이되었으며 컨트롤러에서 온 내림차순으로 목록을 볼 수있었습니다 Model.OrderByDescending(x=>x.Action==0).ThenBy(x=>x.Action).
— Sorangwala Abbasali

2
(가) <thead>를 포함해야합니다 <tr>, 다음 <th>이야
— brahimm

이것은 표준 DataTable의 경우에 해당됩니다 (그리고 내 문제를 해결하십시오). RE : @CSLewis : 정적 테이블에 대해서는 잘 모르겠지만 Ajax 요청과 함께 런타임에 열을 구성하는 경우 아무것도 포함 할 필요가 <thead>없지만 DataTable () 시작에서 다음과 같이 열을 정의해야합니다. datatables .net / reference / option / columns.data
— Harvey Dobson

64

또한이 문제가 발생했습니다.이 배열은 범위를 벗어났습니다.

order: [1, 'asc'],

1
이것은 항상 나를 얻는다. 배열이 범위를 벗어난 경우 배열을 기본값으로 0으로 설정하는 방법이 있습니까?
— JGreasley

6
@JGreasley 빈 배열로 설정할 수 있습니다. order : []
— hogarth45

2
5와 내가 여기에 7을 지정했던 내 열! 감사합니다
— aiffin

1
하나! 주! 일주일 내내! 그리고 그것은 주 7 일입니다! 그리고 나는 내가 9시 5 분, 9 시부 터 자정까지 일 하지 않았다고 확신한다 ... 이 버그에 대해 몰랐기 때문에 모든 것을 잃었다 ! Arrrrrrrrrrrgh !! ... 너무 많은 시간을 허비하고 매우 부끄럽습니다. 인터넷을 여러 번 검색하고 가능한 모든 솔루션을 실험했습니다.이 문제를 '수정'할 수있는 방법은 없습니다. 그리고 ... 우연히 이미 절망적 인 ... 당신의 대답을 발견했습니다. 5 분 만에 모든 것이 해결되었습니다 . 내가 부자라면 € 10K 수표를 보내 드릴게요 — lol
— Gwyneth Llewelyn

9

저에게 버그는 DataTables 자체에있었습니다. 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 위 올바르게 문제 / 버그를 발견하지만, 그렇게에 대해 취소되지 않은 이유를 이 있었다, 사실, 문제. 나는 2 년 후에 당신에게 대답 할 것입니다. 그리고 분명히 이것은 적어도 내가 아는 한 공식 문서에도 언급되지 않았고 수정되지 않았습니다.
— Gwyneth Llewelyn

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

나는이 문제가 있었고 다른 스크립트가 모든 테이블을 삭제하고 다시 생성했기 때문에 테이블이 다시 생성되지 않았습니다. 내 테이블이 페이지에 표시되지 않는다는 것을 알기 전에이 문제에 대해 오랜 시간을 보냈습니다. DataTable을 초기화하기 전에 테이블을 볼 수 있습니까?

기본적으로 다른 스크립트는 다음을 수행했습니다.

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"]]'


OP의 질문과 관련이 없지만 내 경우에는 작동합니다 (html 5 데이터 속성 사용)
— blackbiron

0

제 경우 order에는 데이터 테이블을 구성하는 스크립트 내부에 속성을 적용 할 때 유효한 열 번호를 설정하여 문제를 해결했습니다 .

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

기본적으로 같은 것을 말하는 다른 답변이 이미 있습니다. 오래된 질문에 대한 중복 답변을 피하십시오.
— thelr
당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.