重装数据表时,双Ajax调用(Double ajax call when reloading dat

2019-10-18 23:37发布

我有intialised这样的数据表:

var _initTable = function() {
    $('#datatablesresults tr').not(':first').on('click', function() {
        var dateandtime = $(this).find(':nth-child(3)').text();
        window.location.href = '/results/detail/dateandtime/' + dateandtime;
    });
};

$('#datatablesresults').dataTable({
    bProcessing  : true,
    sProcessing  : true,
    bServerSide  : true,
    sAjaxSource  : '/results/load-results',
    fnServerParams: function ( aoData ) {
        aoData.push( {"name": "quizid", "value": quizid },{ "name": "questionid", "value": questionid } );
    },
    aoColumnDefs : [{'bSortable' : false, 'aTargets' : ['no-sort']}], // make the actions column unsortable
    sPaginationType : 'full_numbers',
    fnDrawCallback  : function(oSettings) {
        _initTable();
    }
});

当我点击一个按钮,我想重新加载该表中的数据(使一个Ajax调用)

$('.carousel-control.right').click(function() {
    var currentquestion = $('#myCarousel .active').index('#myCarousel .item') + 1;
    var question = currentquestion + 1;

    var quizid = <?= json_encode($quizid); ?>;

    var activediv = $('.item').filter('.active');
    var questionid = activediv.index() + 2;

    var questionclass = ".question" + questionid;

    var questionid = $(questionclass).attr("id");

    var getParams = "quizid=" + quizid +"&questionid=" + questionid;

    $("#datatablesresults").dataTable().fnReloadAjax("/results/load-results?" + getParams);
});

但该数据保持不变......在这里,你看到我的Ajax调用:

首先是加载我的网页时。 第二个是我的ajax刷新,这是重发是不同的,那么其他的数据。 但你看到有另一个Ajax调用覆写数据...:/

没有人知道我在做什么错?

编辑:我已经做了的jsfiddle: http://jsfiddle.net/8TwS7/

Answer 1:

你不需要使用.dataTable()一旦你已经定义它。

首先分配给数据表变量:

var myDataTable = $('#datatablesresults').dataTable({
    bProcessing  : true,
    sProcessing  : true,
    bServerSide  : true,
    sAjaxSource  : '/results/load-results',
    fnServerParams: function ( aoData ) {
        aoData.push( {"name": "quizid", "value": quizid },{ "name": "questionid", "value": questionid } );
    },
    aoColumnDefs : [{'bSortable' : false, 'aTargets' : ['no-sort']}], // make the actions column unsortable
    sPaginationType : 'full_numbers',
    fnDrawCallback  : function(oSettings) {
        _initTable();
    }
});

然后,只需使用该变量fnReloadAjax刷新它:

myDataTable.fnReloadAjax("/results/load-results?" + getParams);


Answer 2:

当你调用这条线

$("#datatablesresults").dataTable().fnReloadAjax("/results/load-results?" + getParams);

你又重新初始化数据表

把你的数据表()在文档准备一个变量,然后调用fnDraw()重绘表...就像我在您的其他问题回答与点击Ajax调用刷新数据表中的数据

如果你需要更多的帮助后您的整个js代码,我会告诉你



文章来源: Double ajax call when reloading datatable