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.