2012-04-24 37 views
2

所以我使用這個屬性「bStateSave」:true保存jQuery Datatable的狀態,但由於某種原因它不適用於我。當我執行頁面刷新時,它不保存搜索結果和分頁等。是否還有其他一些參數需要與此一起進行。我主要是這個頁面jQuery Datatable,像分頁,搜索等保存表的狀態

http://datatables.net/examples/basic_init/state_save.html

代碼太龐大嚇壞被張貼上會通過的信息,我不知道什麼剪斷我應該用於發佈。在此先感謝您的幫助。

+0

我用它爲好,我沒有任何問題。嘗試檢查您的Cookie。你至少可以在你的javascript代碼中發佈你的dataTable()調用嗎? – Tom 2012-04-24 21:10:55

回答

0

您在瀏覽器中檢查時是否看到cookie?我使用Chrome和開發者工具查看您發送的鏈接的當前Cookie。我看到一個名爲「datatables.net」的cookie存儲在我的機器上。在嘗試自定義DataTables代碼時,你看到這個cookie嗎?

+0

所以我嘗試這個警報(dojo.cookie(「datatables.net」)),它說「未定義」。這是什麼意思 ?有沒有設置cookie?但是我認爲,在內部,API就是這樣做的,它設置了Cookie,然後讀取它以保存表的狀態。 – user1006072 2012-04-24 21:21:56

+0

@ user1006072如果您可以使用Firefox中的擴展名Firecookie,它會告訴您更多信息。您應該看到如下所示的內容:SpryMedia_DataTables_ ,並有完整的細分。底線是阻止這個cookie的東西。嘗試不同的瀏覽器,看看是否有任何改變。 – Tom 2012-04-24 22:08:06

+0

謝謝@Tom。我會給這個鏡頭。 – user1006072 2012-04-25 23:47:16

7

首先,你要確保你有一個cookie,一旦你加載你的頁面跳轉到chrome,點擊「設置」,然後「顯示高級設置」,在隱私部分點擊內容設置。

下面是來自該網站的代碼示例,在我的web應用程序中正常工作,並確保您擁有該插件的最新版本。

$('#MyExampleGrv').dataTable({ 
    "bStateSave": true, 
    "fnStateSave": function (oSettings, oData) { 
     localStorage.setItem('DataTables_' + window.location.pathname, JSON.stringify(oData)); 
    }, 
    "fnStateLoad": function (oSettings) { 
     var data = localStorage.getItem('DataTables_' + window.location.pathname); 
     return JSON.parse(data); 
    } 
}); 

這段代碼的含義,是讓本地存儲來代替餅乾,並使用特定而不只是使用一個通用的標識稱爲數據表,這樣,如果你有另一個頁面上表中的頁面時,會出現沒有衝突。如果您使用ASP.NET控件和GridView,如果您使用內置於ASP.NET中的通用CRUD操作(例如EDIT/DELETE/UPDATE)以及您的編輯器,則此代碼不會執行此代碼的保存分頁狀態項目在分頁第3頁上,回發後默認爲第1頁,甚至通過AJAX進行部分回發。

+0

小警告。如果您的網站/應用程序URL很安靜,此方法可能會逐漸填滿本地存儲空間。您可能想要增強此代碼以從「window.location.pathname」中刪除任何ID。 – Jess 2017-09-21 12:57:14

3

我知道這個答案不是關於這個舊版本的datatables,但我相信它會幫助新手。

從2011年到現在,Datatables API發生了很大變化。 要保存數據表的狀態,請使用HTML5 LocalStorage或DB(ajax回調)。 啓用狀態,使用本地存儲保存,你做以下電話:

$(document).ready(function() { 
$('#datatable').DataTable({ 
    stateSave: true, 
}); 
}); 

如果你想使用的sessionStorage的代替localStorage的

$(document).ready(function() { 
$('#datatable').DataTable({ 
    stateSave: true, 
    stateDuration:-1 //force the use of Session Storage 
}); 
}); 

如果你想使用一個數據庫避免將它們存儲在瀏覽器中,那麼您必須使用選項stateSaveCallbackstateLoadCallback中定義的回調函數。

下面是一個例子和源代碼的教程將告訴您如何實現上述所有的方法:Datatables state save client and server-side

+0

工作就像一個魅力對我來說。謝謝! – 2016-11-23 15:53:53