JQuery डेटाटैब: अपरिभाषित की संपत्ति 'aDataSort' नहीं पढ़ सकता है


96

मैंने इस फिडेल को बनाया और यह मेरी आवश्यकताओं के अनुसार अच्छा काम करता है: फिडल

हालाँकि, जब मैं अपने आवेदन में उसी का उपयोग करता हूं तो मुझे ब्राउज़र कंसोल में एक त्रुटि मिलती है जो कहती है कि अपरिभाषित की संपत्ति 'aDataSort' नहीं पढ़ सकता है

मेरे आवेदन में, जावास्क्रिप्ट नीचे की तरह कुछ पढ़ता है: मैंने नियंत्रक आउटपुट की जांच की है ... यह अच्छी तरह से काम करता है और कंसोल पर भी मुद्रित होता है।

$(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" कहलाता है।
डैनियल

क्या आपका मतलब html टेबल की आईडी है? मैंने उस पर ध्यान दिया है। मुझे एक लक्ष्य रखने की कोशिश करें।
स्वेटेक

@Daniel स्रोत लोडडैटटेबल () फ़ंक्शन का पैरामीटर है।
स्वेटेक

जवाबों:


131

यह महत्वपूर्ण है कि आपका THEAD तालिका में खाली नहीं है। डेटाटेबल के लिए आपको अपेक्षित डेटा के कॉलम की संख्या निर्दिष्ट करने की आवश्यकता है। आपके डेटा के अनुसार यह होना चाहिए

<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
क्या होगा यदि मेरे पास एक आवश्यकता है जिसमें कॉलम को कॉन्फ़िगर करना और रनटाइम पर उक्त कॉलमों की संख्या शामिल है? मैं उपरोक्त आवश्यकता के लिए कोड कैसे लागू कर सकता हूं?
सीएस लुईस

इससे मुझे डेटा के मेरी समस्या को नहीं छापने में मदद मिली। खैर इससे मुझे मदद करने के लिए मेरी एक और समस्या का इलाज करने में मदद मिली जहां मैंने लिखा था "Sort":false, फिर यह सूची को अवरोही क्रम में देखने में सक्षम था जो नियंत्रक के रूप में आया था Model.OrderByDescending(x=>x.Action==0).ThenBy(x=>x.Action)
सोरंगवाला अब्बासली

2
एक <thead>होना चाहिए <tr>, तो <th>s
ब्राह्मण

यह एक मानक डेटाटेबल के लिए सही है (और मेरी समस्या को हल करें)। RE: @CSLewis: मुझे स्टैटिक टेबल के साथ यकीन नहीं है, लेकिन अगर आप अजाक्स अनुरोध के साथ रनटाइम पर कॉलम कॉन्फ़िगर कर रहे हैं, तो इसमें कुछ भी <thead>होना आवश्यक नहीं है, लेकिन आपको अपने डेटाटेबल () आरंभ में कॉलम को परिभाषित करना होगा: डेटाटैबल्स .net / reference / option / columns.data
हार्वे डोबसन

61

यह मुद्दा भी था, यह सरणी सीमा से बाहर थी:

order: [1, 'asc'],

1
यह मुझे हमेशा मिलता है। क्या सरणी को 0 से डिफ़ॉल्ट करने का एक तरीका है, यदि सरणी सीमा से बाहर है?
JGreasley

6
@Jreasley आप इसे एक खाली सरणी के रूप में सेट कर सकते हैं: आदेश: []
hogarth45

2
खदान कॉलम जहां 5 और मैं यहां 7 निर्दिष्ट कर रहे थे! धन्यवाद
aiffin

1
एक! सप्ताह! एक पूरा हफ्ता! और वह 7 दिन का सप्ताह है! और मुझे पूरा यकीन है कि मैं 9 से 5 काम नहीं कर रहा था , 9 से आधी रात की तरह ... यह सब खो गया क्योंकि मुझे इस बग के बारे में नहीं पता था !! Arrrrrrrrrrrgh !! ... इतना समय बर्बाद किया, मुझे बहुत शर्म आती है, मैंने बार-बार इंटरनेट पर खोज की और सभी संभव समाधानों के साथ प्रयोग किया - कोई भी इसे 'ठीक' करने के करीब नहीं आएगा। और फिर ... मात्र मौका और पहले से ही निराश ... मैं आपके जवाब में आया, और ता-दा! पांच मिनट में सब कुछ तय हो गया । अगर मैं अमीर था, तो मैं आपको € 10K - lol
Gwyneth Llewelyn

9

मेरे लिए, बग डेटाटेबल्स में ही था; DataTables 1.10.9 में छँटाई के लिए कोड सीमा की जाँच नहीं करेगा; इस प्रकार यदि आप कुछ का उपयोग करते हैं

order: [[1, 'asc']]

एक खाली तालिका के साथ, कोई पंक्ति idx 1 नहीं है -> यह अपवाद सुनिश्चित करता है। यह तब हुआ जब तालिका के डेटा को अतुल्यकालिक रूप से प्राप्त किया जा रहा था। प्रारंभ में, डेटा लोड करने वाले पृष्ठ पर डेटा के बिना आरंभिक हो जाता है। परिणाम डेटा प्राप्त होते ही इसे बाद में अपडेट किया जाना चाहिए।

मेरा समाधान:

// 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 डेटा विशेषताओं का उपयोग करके)
ब्लैकबिरॉन

-1

मेरे मामले में मैंने orderस्क्रिप्ट के अंदर संपत्ति को लागू करते समय एक वैध कॉलम संख्या की स्थापना करके समस्या को हल किया, जहां आप डेटा तालिका को कॉन्फ़िगर करते हैं।

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

पहले से ही अन्य उत्तर मूल रूप से एक ही बात कह रहे हैं। कृपया उन प्रश्नों पर अनावश्यक उत्तर से बचने की कोशिश करें जो वर्षों पुराने हैं।
थल
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.