浏览器刷新时,不会在DataTable中调用Ajax

时间:2014-10-20 20:19:31

标签: jquery datatable

我正在使用jquery.dataTables.js版本1.10.0构建DataTable。我正在使用带有分页的服务器端处理,除了一件事以外,一切都运行得非常好。当我刷新浏览器(Chrome或IE 10)时,没有执行ajax代码来刷新表。因此,表也不令人耳目一新。如果我使用浏览器返回或转发,它可以完美运行。

我是否需要做一些特别的事情来强制DataTable在浏览器刷新时重新加载?

这是我的dataTable声明:

      var dataTable = table.dataTable({
          "retrieve": true,
          "lengthMenu": [ [10, 30, 50, -1], [10, 30, 50, "All"] ],
          "serverSide": true,
          "paging": true,
          "searching":false,
          "pageLength": 30,
          "columns": [ {
            "sTitle": "col1"
          }, {
            "sTitle": "col2"
          } ],
          "dom": '<"top"if>rt<"bottom"lp><"clear">',
          "ajax": {
              // set up input parameters
              "data": function(data) {
                  var length = table.dataTable().api().page.len();
                  var url = baseUrl + '/' + data.start + '/' + length;
                  table.dataTable().api().ajax.url(url);
                  draw = data.draw;
                  return {};
              },
              "url": baseUrl, //will be reset by data function
              "dataFilter": function(data,type) {

                  var results = {};
                  ....  //reformat the REST response for DataTable

                  return JSON.stringify(results);
              },
              "dataSrc": function(data) {

                  // hide length menu if records are less than minimum display
                  if (data.recordsTotal <= 10) {
                          $('#' + callType + relNcid + '_length').hide();
                      }

                  // hide page menu if all records fit on this page
                  if (data.recordsTotal <= table.dataTable().api().page.len()) {
                      $('#' + callType + relNcid + '_paginate').hide();
                  } else {
                      $('#' + callType + relNcid + '_paginate').show();
                  }
                  table.addClass('table table-condensed');
                  $anchorScroll();
                  return transformRelDataForTable(data.data);
              }
          }
        });

此代码正在浏览器刷新时执行,但是,当我在“绘制”时放置断点。功能或&#39; dataFilter&#39;它永远不会破坏。

我正在使用 Jquery 1.11.0 AngularJS 1.2.13

1 个答案:

答案 0 :(得分:0)

我发现并解决了这个问题。它是dataTables的外部。这是因为无声的失败导致访问该表。我的代码:

$('#' + relPosition).dataTable({.....});

静默失败,因为jquery引用的表尚不存在,因为它是ng-repeat子句的一部分,而Angular尚未在DOM上呈现该节点。在单步执行dataTable代码时,我注意到它将所有东西都短路了,因为表不存在(正确地说是这样),但是在这种情况下让dataTable代码抛出异常会非常有帮助。这样可以省去我几天的麻烦。