数据表ajax从新源重新加载

时间:2015-03-17 21:41:34

标签: javascript jquery ajax datatables

如何使用新的ajax功能重新加载数据表?

我认为这是一个范围问题。

function load_table(tableName,src)
{
    var oTable = $('#'+tableName).DataTable({
          'bProcessing'    : true,
          'bServerSide'    : true,
          'responsive' : true,
          'sAjaxSource'    : src,

        'fnServerData'   : function(sSource, aoData, fnCallback)
          {
            $.ajax({
              'dataType': 'json',
              'type'    : 'POST',
              'url'     : sSource,
              'data'    : aoData,
              'success' : fnCallback
            }); 
          }, 
     });
}

尝试从其他数据源重新加载它:

$("input[type="button"]").on('click',function()
{

oTable.ajax.url( 'newsource' ).load();
alert( 'Data source: '+oTable.ajax.url() );


});

警报输出:src:newsource

浏览器从src:oldsource

加载表格

3 个答案:

答案 0 :(得分:2)

对于今后遇到此问题的人来说,我遇到同样的问题是解决方案:

完成从不同来源重新加载数据:

引用DOM表格元素 NOT DataTable对象,否则会出现重新启动错误:

第1步:清除数据:

$('#your_table_name').DataTable().clear();

第2步:销毁DataTable对象

 $('#your_table_name').DataTable().destroy();

如果您正在使用子行,则删除点击侦听器非常重要

   $( "#your_table_name tbody" )
    .off( "click", "td.details-control");

重新启动DataTables:

loadTable('newsource','your_table_name')

和你的loadTable函数

function loadTable(src,tableName)
{
var oTable = $('#'+tableName).DataTable({
  'bProcessing'    : true,
  'bServerSide'    : true,
        'responsive' : true,
         "sDom": '<"toolbar"lfr>tip<"F">R',

  'sAjaxSource'    : src,

   });

  //initchildrows()
}

答案 1 :(得分:1)

是的,这似乎是一个范围问题。您将dataTables实例分配给局部变量:

function load_table(tableName,src)
{
    var oTable = $('#'+tableName).DataTable({
          'bProcessing'    : true,
          ...

将其分配给全局变量:

var oTable;
function load_table(tableName,src)
{
    oTable = $('#'+tableName).DataTable({
          'bProcessing'    : true,
          ...

如果它仍然不起作用 - 但它应该正确使用oTable.ajax.url(<src>).load() - 然后只需使用destroy : true选项重新初始化表格:

var oTable;
function load_table(tableName,src)
{
    oTable = $('#'+tableName).DataTable({
          destroy : true,
          'bProcessing'    : true,
          ...

并从活动中致电load_table

$("input[type='button']").on('click',function()
{
   load_table('tableName', 'newsource');
});

答案 2 :(得分:0)

谢谢,这是我的解决方案,它不完美,必须发送两次url,感谢这位作者:如何修改查询数据表的ajax url?例如:if if如果你像这样初始化数据表:

  var datatables_options = {
                                "aLengthMenu" : [ [ 5, 10, 50, 100,500, -1 ],[ 5, 10, 50, 100,500, "All" ] ],
                                "iDisplayLength" : 5,
                                "sDom": 'T<"clear">rt<"float_left"i><"float_right_nexpage"p><"float_right_display"l>',
                               <'float_right_nexpage'p>                    <'float_right_display'l>>",
                                "bSort" : false,
                                "bProcessing" : false,
                                "bServerSide" : true,
                                "bStateSave" : true,  
                                "bDestroy" : true,
                                "bDeferRender":true,
                                "bJQueryUI" : false,
                                "sScrollX" : "100%",
                                "bStateSave":true,
                                "language" : oLanguageData,
                                "aoColumns" : aoColumnsData,                               
                                "fnDrawCallback" : function() {
//Checkbox status updates
                                    $("#uniform-check-all").removeClass("checker");                                   
                                    $("span").removeClass("checked");
                                    $("span #check-all").attr("checked",false);
                                    $.uniform.update();
                                 },
                                "fnRowCallback" : function(nRow, aData,
                                        iDataIndex) {   

                                },
                                "sAjaxSource" : "wageQuery.action?wageDate="
                                        + date,
                                "fnServerData" : function(sSource, aoData,
                                        fnCallback) {
                                    $.ajax({
                                        "type" : 'post',
                                        "async":false,
                                        "url" : sSource,
                                        "dataType" : "json",
                                        "data" : aoData,
                                        "success" : function(resp) {
                                            fnCallback(resp);
                                        }

                                    });
                                },
                                "fixedColumns":   {
                                     "iLeftColumns" : 4,
                                     "sHeightMatch" : "auto"
                                },

                            };

import:如果你想重新加载新的url(动作),这里有解决方案:第一步:在JSP文件中初始化表变量,如下所示:

 <script type="text/javascript">

          var wageNowTable;//Table global variables, do not put in the ready function, otherwise it is not a global variable
       </script>

第二步:将以下代码添加到JS文件中,如下所示:

 $("#wages-query")
                .click(
                        function() {
                            var datatables_options = {
                                "aLengthMenu" : [ [ 5, 10, 50, 100,500, -1 ],[ 5, 10, 50, 100,500, "All" ] ],
                                "iDisplayLength" : 5,
                                //The following SDOM, 1.9 version will not show up
                                "sDom": 'T<"clear">rt<"float_left"i><"float_right_nexpage"p><"float_right_display"l>',
                                //"sDom" : "<r>t<'float_left'i><'float_right_nexpage'p><'float_right_display'l>>",
                                "bSort" : false,
                                "bProcessing" : false,
                                "bServerSide" : true,
                                "bStateSave" : true,   
                                "bDestroy" : true,
                                "bDeferRender":true,
                                "bJQueryUI" : false,
                                "sScrollX" : "100%",
                                "bStateSave":true,
                                "language" : oLanguageData,
                                // "aaData" : data,
                                "aoColumns" : aoColumnsData,        
                                "fnRowCallback" : function(nRow, aData,
                                        iDataIndex) {                                  
                                },
                                "sAjaxSource" : "wageQuery.action?wageDate="
                                        + date,
                                "fnServerData" : function(sSource, aoData,
                                        fnCallback) {
                                    $.ajax({
                                        "type" : 'post',
                                        "async":false,
                                        "url" : sSource,
                                        "dataType" : "json",
                                        "data" : aoData,
                                        "success" : function(resp) {
                                            fnCallback(resp);
                                        }

                                    });
                                },
                                "fixedColumns":   {
                                     "iLeftColumns" : 4,
                                     "sHeightMatch" : "auto"
                                },

                            };

                            //Determine whether the table has been an instance, there is no instance, has been a direct update, load the corresponding URL
                            if (typeof(wageNowTable) == "undefined") {
                                wageNowTable = $('#sample_1').dataTable(datatables_options);

                            }else{
                                var oSettings = wageNowTable.fnSettings();
                                oSettings.sAjaxSource = "wageQuery.action?wageDate="
                                    + date;
                                wageNowTable.fnDraw(false);//Don't jump to the first page, the page number and the reserved page displays the number of
                                wageNowTable.fnDraw(false);//
                            }


                                //Important point: listen to the state of the check box, the important need to use the form of on, the direct click can not change the state
                            $('.DTFC_LeftHeadWrapper div').on('click','input' ,function () {
                                            $("#uniform-check-all").removeClass("checker");

                                            $("span").removeClass("checked");


                                                    var val = $(this).prop("checked");
                                                    $("input[type='checkbox']", ".DTFC_LeftHeadWrapper").attr("checked", val);

                                                    $("#check-all").attr("checked", val);
                                                    if (val) {
                                                        $(".checkboxes").each(function(index){
                                                             $(this).attr("checked", val);

                                                        });
                                                    } else {
                                                       $(".checkboxes").each(function(index){
                                                             $(this).attr("checked", val);

                                                        });
                                                    }

                           } );     
                });

确定表是否是实例,没有实例,是否已直接更新,加载新URL:

if (typeof(wageNowTable) == "undefined") {
                            wageNowTable = $('#sample_1').dataTable(datatables_options);

                        }else{
                            var oSettings = wageNowTable.fnSettings();
                            oSettings.sAjaxSource = "wageQuery.action?wageDate="
                                + date;
                            //need twice fndraw
                            wageNowTable.fnDraw(false);
                            wageNowTable.fnDraw(false);
                        }