Programing

jQuery dataTable을 다시로드 / 새로 고침하는 방법은 무엇입니까?

lottogame 2020. 10. 31. 09:09
반응형

jQuery dataTable을 다시로드 / 새로 고침하는 방법은 무엇입니까?


화면의 버튼을 클릭하면 jQuery dataTable 이 새로 고쳐지 는 기능을 구현하려고합니다 (dataTable이 생성 된 이후 서버 측 데이터 소스가 변경되었을 수 있으므로).

내가 가진 것은 다음과 같습니다.

$(document).ready(function() {
    $("#my-button").click(function() {
        $("#my-datatable").dataTable().fnReloadAjax();
    });
});

그러나 이것을 실행하면 아무것도하지 않습니다. 버튼을 클릭 할 때 dataTable을 새로 고치는 적절한 방법은 무엇입니까? 미리 감사드립니다!


다음을 시도 할 수 있습니다.

function InitOverviewDataTable()
{
  oOverviewTable =$('#HelpdeskOverview').dataTable(
  {
    "bPaginate": true,
    "bJQueryUI": true,  // ThemeRoller-stöd
    "bLengthChange": false,
    "bFilter": false,
    "bSort": false,
    "bInfo": true,
    "bAutoWidth": true,
    "bProcessing": true,
    "iDisplayLength": 10,
    "sAjaxSource": '/Helpdesk/ActiveCases/noacceptancetest'
  });
}

function RefreshTable(tableId, urlData)
{
  $.getJSON(urlData, null, function( json )
  {
    table = $(tableId).dataTable();
    oSettings = table.fnSettings();

    table.fnClearTable(this);

    for (var i=0; i<json.aaData.length; i++)
    {
      table.oApi._fnAddData(oSettings, json.aaData[i]);
    }

    oSettings.aiDisplay = oSettings.aiDisplayMaster.slice();
    table.fnDraw();
  });
}

function AutoReload()
{
  RefreshTable('#HelpdeskOverview', '/Helpdesk/ActiveCases/noacceptancetest');

  setTimeout(function(){AutoReload();}, 30000);
}

$(document).ready(function () {
  InitOverviewDataTable();
  setTimeout(function(){AutoReload();}, 30000);
});

http://www.meadow.se/wordpress/?p=536


DataTables 1.10.0 버전을 사용하면 다음과 같이 쉽게 기본 제공됩니다.

var table = $('#example').DataTable();
table.ajax.reload();

아니면 그냥

$('#example').DataTable().ajax.reload();

http://datatables.net/reference/api/ajax.reload ()


광범위한 DataTable API를 사용하여 다음 방법으로 다시로드 할 수 있습니다. ajax.reload()

데이터 테이블을 DataTable()(새 버전) 으로 선언하는 경우 다음 이 필요합니다.

var oTable = $('#filtertable_data').DataTable( );
// to reload
oTable.ajax.reload();

데이터 테이블을 dataTable()(이전 버전) 으로 선언하는 경우 다음 이 필요합니다.

var oTable = $('#filtertable_data').dataTable( );
// to reload
oTable.api().ajax.reload();

먼저 데이터 테이블을 파괴 한 다음 데이터 테이블을 그립니다.

$('#table1').DataTable().destroy();
$('#table1').find('tbody').append("<tr><td><value1></td><td><value1></td></tr>");
$('#table1').DataTable().draw();

나는 같은 문제가 있었는데 이것이 내가 그것을 고친 방법입니다.

먼저 원하는 방법으로 데이터를 가져옵니다. 테이블을 변경할 결과를 제출 한 후 ajax를 사용합니다. 그런 다음 새로운 데이터를 지우고 추가합니다.

var refreshedDataFromTheServer = getDataFromServer();

var myTable = $('#tableId').DataTable();
myTable.clear().rows.add(refreshedDataFromTheServer).draw();

다음은 소스입니다 : https://datatables.net/reference/api/clear ()


이 간단한 대답은 나를 위해 일했습니다.

                  $('#my-datatable').DataTable().ajax.reload();

ref https://datatables.net/forums/discussion/38969/reload-refresh-table-after-event


var ref = $('#example').DataTable();
ref.ajax.reload();

당신이 추가하려면 다시로드 / 새로 고침 버튼을DataTables 1.10 후 사용 drawCallback을 .

아래 예를 참조하십시오 ( 부트 스트랩 CSS와 함께 DataTables사용 하고 있습니다)

var ref= $('#hldy_tbl').DataTable({
        "responsive": true,
        "processing":true,
        "serverSide":true,
        "ajax":{
            "url":"get_hotels.php",
            "type":"POST"
        },
        "drawCallback": function( settings ) {
            $('<li><a onclick="refresh_tab()" class="fa fa-refresh"></a></li>').prependTo('div.dataTables_paginate ul.pagination');
        }
    });

function refresh_tab(){
    ref.ajax.reload();
}

이것이 제가하는 방법입니다 ... 아마도 최선의 방법은 아니지만 확실히 더 간단하고 (IMHO) 추가 플러그인이 필요하지 않습니다.

HTML

<div id="my-datatable"></div>

jQuery

function LoadData() {
    var myDataTable = $("#my-datatable").html("<table><thead></thead><tbody></tbody></table>");
    $("table",myDataTable).dataTable({...});
}
$(document).ready(function() {
    $("#my-button").click(LoadData);
    LoadData();
});

참고 : jQuery dataTable로 작업 할 때 가끔 <thead></thead><tbody></tbody>없으면 작동하지 않는 경우가 있습니다. 그러나 당신은 그것 없이도 지나갈 수 있습니다. 나는 그것이 무엇이 필요하고 무엇이 필요하지 않은지 정확히 파악하지 못했습니다.


먼저 데이터 테이블을 파괴 한 다음 다시 설정하십시오.

var table;
$(document).ready(function() {
    table = $("#my-datatable").datatable()
    $("#my-button").click(function() {
        table.fnDestroy();
        table = $("#my-datatable").dataTable();
    });
});

다음 코드를 사용하는 것이 좋습니다.

table.ajax.reload(null, false); 

그 이유는 다시로드 할 때 사용자 페이징이 재설정되지 않기 때문입니다.
예:

<button id='refresh'> Refresh </button>

<script>
    $(document).ready(function() {

        table = $("#my-datatable").DataTable();
        $("#refresh").on("click", function () { 
         table.ajax.reload(null, false); 
        });

   });
</script>

이에 대한 자세한 내용은 여기 에서 찾을 수 있습니다.


스크립트를로드하는 방법 / 위치는 표시하지 않았지만 플러그인 API 함수를 사용하려면 DataTables 라이브러리를로드 한 후 DataTable을 초기화하기 전에 페이지에 포함시켜야합니다.

이렇게

<script type="text/javascript" src="jquery.dataTables.js"></script>
<script type="text/javascript" src="dataTables.fnReloadAjax.js"></script>

url 속성을 사용하는 경우

table.ajax.reload()

누군가에게 도움이되기를 바랍니다.


Allan Jardine의 DataTables는 테이블 형식 데이터를 표시하기위한 매우 강력하고 매끄러운 jQuery 플러그인입니다. 많은 기능이 있으며 원하는 대부분을 수행 할 수 있습니다. 하지만 흥미롭게도 한 가지 어려운 것은 내용을 간단한 방법으로 새로 고치는 방법입니다. 그래서 저는 제 자신의 참조를 위해, 그리고 아마도 다른 사람들의 이익을 위해 다음과 같은 한 가지 방법의 완전한 예가 있습니다.

HTML

<table id="HelpdeskOverview">
  <thead>
    <tr>
      <th>Ärende</th>
      <th>Rapporterad</th>
      <th>Syst/Utr/Appl</th>
      <th>Prio</th>
      <th>Rubrik</th>
      <th>Status</th>
      <th>Ägare</th>
    </tr>
  </thead>
  <tbody>
  </tbody>
</table>

자바 스크립트

function InitOverviewDataTable()
{
  oOverviewTable =$('#HelpdeskOverview').dataTable(
  {
    "bPaginate": true,
    "bJQueryUI": true,  // ThemeRoller-stöd
    "bLengthChange": false,
    "bFilter": false,
    "bSort": false,
    "bInfo": true,
    "bAutoWidth": true,
    "bProcessing": true,
    "iDisplayLength": 10,
    "sAjaxSource": '/Helpdesk/ActiveCases/noacceptancetest'
  });
}

function RefreshTable(tableId, urlData)
{
  $.getJSON(urlData, null, function( json )
  {
    table = $(tableId).dataTable();
    oSettings = table.fnSettings();

    table.fnClearTable(this);

    for (var i=0; i<json.aaData.length; i++)
    {
      table.oApi._fnAddData(oSettings, json.aaData[i]);
    }

    oSettings.aiDisplay = oSettings.aiDisplayMaster.slice();
    table.fnDraw();
  });
}

function AutoReload()
{
  RefreshTable('#HelpdeskOverview', '/Helpdesk/ActiveCases/noacceptancetest');

  setTimeout(function(){AutoReload();}, 30000);
}

$(document).ready(function () {
  InitOverviewDataTable();
  setTimeout(function(){AutoReload();}, 30000);
});

출처


var myTable = $ ( '# tblIdName'). DataTable (); myTable.clear (). rows.add (myTable.data) .draw ();

이것은 ajax를 사용하지 않고 나를 위해 일했습니다.


데이터 테이블을 새로 고치려면이 코드를 사용하십시오.

 $("#my-button").click(function() {
    $('#my-datatable').DataTable().clear().draw();
 });

        if(data.length==0){
            alert("empty");
              $('#MembershipTable > tbody').empty();
            // $('#MembershipTable').dataTable().fnDestroy();
                    $('#MembershipTable_info').empty(); 
                    $("#MembershipTable_length").empty();
                    $("#MembershipTable_paginate").empty();

             html="<tr><td colspan='20'><b>No data available in Table</b> </td></tr>";
           $("#MembershipTable").append(html);
        }

        else{
             $('#MembershipTable').dataTable().fnDestroy();
            $('#MembershipTable > tbody').empty();

         for(var i=0; i<data.length; i++){
            //

.......}


DataTable 도움말 에 따르면 테이블 작업을 수행 할 수있었습니다.

내 DataTable에 여러 데이터베이스를 원했습니다.

예 : data_1.json> 2500 개 레코드-data_2.json> 300 개 레코드-data_3.json> 10265 개 레코드

var table;
var isTableCreated= false;

if (isTableCreated==true) {
    table.destroy();
    $('#Table').empty(); // empty in case the columns change
}
else
    i++;

table = $('#Table').DataTable({
        "processing": true,
        "serverSide": true,
        "ordering": false,
        "searching": false,
        "ajax": {
            "url": 'url',
            "type": "POST",
            "draw": 1,
            "data": function (data) {
                data.pageNumber = (data.start / data.length);
            },
            "dataFilter": function (data) {
                return JSON.stringify(data);
            },
            "dataSrc": function (data) {
                if (data.length > 0) {
                    data.recordsTotal = data[0].result_count;
                    data.recordsFiltered = data[0].result_count;
                    return data;
                }
                else
                    return "";
            },

            "error": function (xhr, error, thrown) {
                alert(thrown.message)
            }
        },
        columns: [
           { data: 'column_1' },
           { data: 'column_2' },
           { data: 'column_3' },
           { data: 'column_4' },
           { data: 'column_5' }
        ]
    });

datatable v1.10.12를 사용하는 경우 단순히 .draw()메서드 를 호출 하고 필요한 그리기 유형을 전달 하면 full-reset, page새 데이터로 dt를 다시 그립니다.

let dt = $("#my-datatable").datatable()

// 조치 수행

dt.draw('full-reset')

더 많은 데이터 테이블 문서를 확인하십시오.


나는 이것과 관련된 일을했다 ... 아래는 당신이 필요로하는 자바 스크립트 샘플이다. 여기에 데모가 있습니다 : http://codersfolder.com/2016/07/crud-with-php-mysqli-bootstrap-datatables-jquery-plugin/

//global the manage member table 
var manageMemberTable;

function updateMember(id = null) {
    if(id) {
        // click on update button
        $("#updatebutton").unbind('click').bind('click', function() {
            $.ajax({
                url: 'webdesign_action/update.php',
                type: 'post',
                data: {member_id : id},
                dataType: 'json',
                success:function(response) {
                    if(response.success == true) {                      
                        $(".removeMessages").html('<div class="alert alert-success alert-dismissible" role="alert">'+
                              '<button type="button" class="close" data-dismiss="alert" aria-label="Close"><span aria-hidden="true">&times;</span></button>'+
                              '<strong> <span class="glyphicon glyphicon-ok-sign"></span> </strong>'+response.messages+
                            '</div>');

                        // refresh the table

                        manageMemberTable.ajax.reload();

                        // close the modal
                        $("#updateModal").modal('hide');

                    } else {
                        $(".removeMessages").html('<div class="alert alert-warning alert-dismissible" role="alert">'+
                              '<button type="button" class="close" data-dismiss="alert" aria-label="Close"><span aria-hidden="true">&times;</span></button>'+
                              '<strong> <span class="glyphicon glyphicon-exclamation-sign"></span> </strong>'+response.messages+
                            '</div>');

                        // refresh the table                        
                        manageMemberTable.ajax.reload();

                        // close the modal
                        $("#updateModal").modal('hide');
                    }
                }
            });
        }); // click remove btn
    } else {
        alert('Error: Refresh the page again');
    }
}

업데이트 작업을 수행 한 후이 코드 줄을 작성해야합니다.

$('#example').DataTable().ajax.reload();


    function autoRefresh(){
        table.ajax.reload(null,false); 
        alert('Refresh');//for test, uncomment
    }

    setInterval('autoRefresh()', 5000); 

초기화로 데이터 테이블을 다시 초기화하고 true ..done..so simple로 검색 쓰기

예.

TableAjax.init();
retrieve: true,

참고 URL : https://stackoverflow.com/questions/12934144/how-to-reload-refresh-jquery-datatable

반응형