2013-11-15 66 views
1

我有一個數據表intialised這樣的:雙Ajax調用數據表

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/

+0

分配到'window.location.href'重新加載頁面,可能那是它? – Barmar

+0

這只是當你點擊表格中的一行時。我100%確定該頁面不會重新加載。 – nielsv

回答

0
當你調用這條線

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

你又在doc重新初始化數據表

地方你的數據表()

準備好一個變量,然後調用fnDraw()來重繪表格......就像我在其他問題中回答的那樣Reload datatable data with ajax call on click

i f你需要更多的幫助發佈你的整個js代碼,我會告訴你

+0

然後我只是得到這個錯誤:Uncaught TypeError:無法讀取null的屬性'oFeatures' – nielsv

+0

您將不得不通過jsfiddle發佈您的整個源代碼以便排除故障......某些內容不足並且沒有查看所有源代碼代碼我只會猜 –

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); 
+0

好吧,但他仍然覆蓋我的數據... – nielsv

+0

jsfiddle:http://jsfiddle.net/8TwS7/ – nielsv

+0

你可以用你的jsfiddle中的一些虛擬數據填充表?有點難以分辨這裏發生了什麼。我會將您的代碼修剪到需要的最小示例 –