尽管这个问题已经很久没有提出来了,但如果有人需要,我还是会发布我的解决方案。
此解决方案适用于 1.10.16 版的 JQuery 数据表。
经过一番挖掘,我找到了在会话到期时显示警报的功能。这里是:
/**
* Log an error message
* @param {object} settings dataTables settings object
* @param {int} level log error messages, or display them to the user
* @param {string} msg error message
* @param {int} tn Technical note id to get more information about the error.
* @memberof DataTable#oApi
*/
function _fnLog( settings, level, msg, tn )
{
msg = 'DataTables warning: '+
(settings ? 'table id='+settings.sTableId+' - ' : '')+msg;
if ( tn ) {
msg += '. For more information about this error, please see '+
'http://datatables.net/tn/'+tn;
}
if ( ! level ) {
// Backwards compatibility pre 1.10
var ext = DataTable.ext;
var type = ext.sErrMode || ext.errMode;
if ( settings ) {
_fnCallbackFire( settings, null, 'error', [ settings, tn, msg ] );
}
if ( type == 'alert' ) {
alert( msg );
}
else if ( type == 'throw' ) {
throw new Error(msg);
}
else if ( typeof type == 'function' ) {
type( settings, tn, msg );
}
}
else if ( window.console && console.log ) {
console.log( msg );
}
}
如您所见,对类型变量进行检查以查看它是否为函数。如果是,它会被调用。注意类型变量是这样获取的:
var type = ext.sErrMode || ext.errMode;
所以我这样做了:
//Check the message and redirect
$.fn.dataTable.ext.errMode = function (settings, tn, msg) {
if (msg.indexOf("YourErrorCode") != -1) {
window.location = "/login";
}
}
只需将 YourErrorCode 替换为您需要的内容即可。
我承认这不是最干净的代码,但它确实有效。