dataTables分页页码缓存问题

当dataTables的stateSave参数设置为true时,分页信息会从web storage中读取,可能导致显示错误的页码。解决方法是将stateSave设置为false。分析了_fnLoadState和_fnSaveState函数,这两个函数分别负责加载和保存状态,包括页码和分页长度等信息。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

由于设置stateSave参数为true,dataTables每次分页信息从web store中获取,导致表格展现出错误的页码(上一次请求页码)。
解决办法:stateSave:false。

代码分析:
if ( oInit.bStateSave )
{
features.bStateSave = true;
_fnLoadState( oSettings, oInit );
_fnCallbackReg( oSettings, 'aoDrawCallback', _fnSaveState, 'state_save' );
}

--------------------------------------------------------------------------------------------------------------------------------
_fnLoadState()函数分析:
//从缓存中取上次页码信息(state),
var state = settings.fnStateLoadCallback.call( settings.oInstance, settings );
if ( ! state || ! state.time ) {
return;
}

//state与ajaxData封装成新setttings,setting中包含:dataTables所有参数数据、ajaxData数据、当前分页信息等。
// Restore key features - todo - for 1.11 this needs to be done by
// subscribed events
settings._iDisplayStart    = state.start;
settings.iInitDisplayStart = state.start;
settings._iDisplayLength   = state.length;
settings.aaSorting = [];

_fnCallbackFire( settings, 'aoStateLoaded', 'stateLoaded', [settings, state] );


--------------------------------------------------------------------------------------------------
_fnSaveState(stttings)函数分析
// bStateSave=true,取出缓存state.否则直接返回
if ( !settings.oFeatures.bStateSave || settings.bDestroying )
{
return;
}

/* Store the interesting variables */
var state = {
time:    +new Date(),
start:   settings._iDisplayStart,
length:  settings._iDisplayLength,
order:   $.extend( true, [], settings.aaSorting ),
search:  _fnSearchToCamel( settings.oPreviousSearch ),
columns: $.map( settings.aoColumns, function ( col, i ) {
return {
visible: col.bVisible,
search: _fnSearchToCamel( settings.aoPreSearchCols[i] )
};
} )
};


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值