重新加载数据表时双重调用ajax

时间:2013-11-15 16:28:51

标签: javascript jquery ajax datatables

我有一个像这样的数据表:

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调用: enter image description here

第一个是我的页面加载时。第二个是我的ajax刷新,重发的数据与另一个不同。但是你看到有另一个ajax调用覆盖数据......:/

有谁知道我做错了什么?

编辑:我做了一个jsfiddle:http://jsfiddle.net/8TwS7/

2 个答案:

答案 0 :(得分:0)

当你拨打这一行时

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

您正在重新初始化数据表

将你的数据表()放在doc中的变量中,然后调用fnDraw()来重绘表...就像我在你的另一个问题中回答Reload datatable data with ajax call on click

如果您需要更多帮助发布整个js代码,我会告诉您

答案 1 :(得分:0)

一旦定义了它,就不需要使用.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);