नए JSON डेटा के साथ डेटाटैबल्स तालिका को मैन्युअल रूप से कैसे अपडेट करें


99

मैं प्लगइन jQuery डेटाटैबल्स का उपयोग कर रहा हूं और अपने डेटा को लोड करता हूं जो मैंने पृष्ठ के निचले भाग में डोम में लोड किया है और इस तरह से प्लगइन शुरू करता है:

var myData = [
    {
        "id": 1,
        "first_name": "John",
        "last_name": "Doe"
    }
];

$('#table').dataTable({
    data: myData
        columns: [
        { data: 'id' },
        { data: 'first_name' },
        { data: 'last_name' }
    ]
});

अभी। कुछ कार्रवाई करने के बाद मैं ajax का उपयोग करके नया डेटा प्राप्त करना चाहता हूं (लेकिन डेटाटैबल्स में ajax विकल्प का निर्माण नहीं - मुझे गलत मिलेगा!) और इन डेटा के साथ तालिका को अपडेट करें। मैं डेटाटैब एपीआई का उपयोग कैसे कर सकता हूं? प्रलेखन बहुत भ्रामक है और मुझे कोई समाधान नहीं मिल रहा है। किसी भी मदद की बहुत सराहना की जाएगी। धन्यवाद।


मौजूदा टेबलबॉडी को हटाने और इसे नया बनाने के बारे में कैसे?
रिपोर्टर

जवाबों:


178

समाधान: (सूचना: यह समाधान datatables संस्करण 1.10.4 के लिए है (फिलहाल) विरासत संस्करण नहीं)।

स्पष्टीकरण प्रति API दस्तावेज़ (1.10.15), एपीआई तीन तरीके पहुँचा जा सकता है:

  1. डेटाटेबल्स की आधुनिक परिभाषा (ऊपरी ऊंट मामले):

    var datatable = $( selector ).DataTable();

  2. DataTables (कम ऊंट मामले) की विरासत परिभाषा:

    var datatable = $( selector ).dataTable().api();

  3. newवाक्य रचना का उपयोग करना ।

    var datatable = new $.fn.dataTable.Api( selector );

फिर डेटा को इस तरह लोड करें:

$.get('myUrl', function(newDataArray) {
    datatable.clear();
    datatable.rows.add(newDataArray);
    datatable.draw();
});

draw(false)डेटा अपडेट के बाद उसी पेज पर बने रहने के लिए उपयोग करें।

एपीआई संदर्भ:

https://datatables.net/reference/api/clear ()

https://datatables.net/reference/api/rows.add ()

https://datatables.net/reference/api/draw ()


4
यह बहुत मुश्किल था, बहुत धन्यवाद! सर्वर राउंडट्रिप्स के बीच डेटाटेबल को बनाए रखने के लिए इसका उपयोग करना।
डग


5
मैं सिर्फ यह जोड़ना चाहता हूं कि आप तरीकों (यानी datatable.clear().rows.add(newDataArray).draw()) को भी चेन कर सकते हैं । इस टिप्पणी के अनुसार, मैं संस्करण 1.10.18
Sal_Vader_808

मैं बटन नियंत्रण के साथ एक कॉलम कैसे जोड़ सकता हूं
ajinkya

31

आप उपयोग कर सकते हैं:

$('#table').dataTable().fnClearTable();
$('#table').dataTable().fnAddData(myData2);

Jsfiddle

अपडेट करें। और हाँ वर्तमान प्रलेखन इतना अच्छा नहीं है लेकिन यदि आप पुराने संस्करणों का उपयोग करके ठीक हैं तो आप विरासत प्रलेखन का उल्लेख कर सकते हैं ।


हां, आप सही हैं, लेकिन मैं डेटाटैबल्स के नवीनतम संस्करण का उपयोग कर रहा हूं। वैसे भी, मुझे एक समाधान मिला और मैंने अपना प्रश्न अपडेट किया। आपकी रुचि के लिए धन्यवाद :)
Indy

1
@CookieMan, कृपया अपना संपादन निकालें और उत्तर के रूप में पोस्ट करें। उसके बाद, इसे स्वीकृत के रूप में चिह्नित करें।
रिपोर्टर

यह समाधान
पेजेशन

यह भी खूब रही। धन्यवाद
क्रिस

8

आपको पुराने डेटा-टेबल इंस्टेंस को नष्ट करने और फिर डेटा-टेबल को फिर से इनिशियलाइज़ करने की आवश्यकता है

अगर $ .fn.dataTable.isDataTable का उपयोग करके डेटा तालिका उदाहरण मौजूद है, तो पहले जांचें

यदि मौजूद है तो इसे नष्ट कर दें और फिर इस तरह के नए उदाहरण बनाएं

    if ($.fn.dataTable.isDataTable('#dataTableExample')) {
        $('#dataTableExample').DataTable().destroy();
    }

    $('#dataTableExample').DataTable({
        responsive: true,
        destroy: true
    });

5

यहाँ विरासत के लिए समाधान है datatable 1.9.4

    var myData = [
      {
        "id": 1,
        "first_name": "Andy",
        "last_name": "Anderson"
      }
   ];
    var myData2 = [
      {
        "id": 2,
        "first_name": "Bob",
        "last_name": "Benson"
      }
    ];

  $('#table').dataTable({
  //  data: myData,
       aoColumns: [
         { mData: 'id' },
         { mData: 'first_name' },
         { mData: 'last_name' }
      ]
  });

 $('#table').dataTable().fnClearTable();
 $('#table').dataTable().fnAddData(myData2);

यह हाल के संस्करण के लिए काम करता है (कृपया, टिप्पणी की तारीख पर विचार करें)। थैंक यू विकास!
टेलमो

इसने मेरे लिए काम किया। लेकिन मुझे समझ में नहीं आता है कि मैं इन सभी उदाहरणों का उपयोग क्यों कर सकता हूं: var datatable = $ (चयनकर्ता) .DataTable (); var datatable = $ (चयनकर्ता) .dataTable ()। एपीआई (); var datatable = new $ .fn.dataTable.Api (चयनकर्ता); लेकिन जोड़ते समय .row ()। ऐड () काम नहीं करता है।
फर्नांडो पाल्मा

4

मेरे मामले में, मैं Jjon को टेबल पर खिलाने के लिए ajax api में निर्मित का उपयोग नहीं कर रहा हूं (यह कुछ स्वरूपण के कारण है जो डेटाटेबल के रेंडरबैक कॉलबैक के अंदर लागू करना मुश्किल था)।

मेरा समाधान ऑनलोड कार्यों के बाहरी क्षेत्र में चर बनाने और डेटा ताज़ा करने वाले फ़ंक्शन ( var table = nullउदाहरण के लिए) को संभालना था ।

फिर मैं लोड विधि पर अपनी तालिका को तुरंत लिखता हूं

$(function () {
            //.... some code here
            table = $("#detailReportTable").DataTable();
            .... more code here
        });

और अंत में, उस फ़ंक्शन में, जो रिफ्रेश को हैंडल करता है, मैं स्पष्ट () और नष्ट () विधि को लागू करता हूं, डेटा को html टेबल में लाता हूं, और डेटाटेबल को फिर से इंस्टेंट करता हूं, जैसे:

function getOrderDetail() {
            table.clear();
            table.destroy();
            ...
            $.ajax({
             //.....api call here
            });
            ....
            table = $("#detailReportTable").DataTable();
   }

मुझे आशा है कि किसी को यह उपयोगी लगता है!


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