jquery的datatables,第一次加载没问题,再次加载datatables弹窗报错:cannot reinitialise datatable。
怎么解决?
1网上的解决办法:
2我的尝试。
1)尝试1。
加上 retrieve:true 和 destroy:true 两个参数即可 另见: retrieveOption destroyOption 参数具体含义 http://datatables.club/faqs/ |
加上之后,虽然不会报错,还是有个问题,就是ajax只执行一次,再次点击ajax就不触发了,即后台的action只执行了一次。这样肯定是不行的。
2)尝试2
只加上,$n.dataTable().fnDestroy();(注意是dataTable,不是DataTable,注意大小写,不然是无效的方法。dataTable是jQuery的用法,DataTable是amazeui的用法)
只可以触发ajax两次,第三次就报错了。
我去网上看,可能跟谷歌浏览器有关系,我就将谷歌浏览器换成IE浏览器,就不会报错了。
3)尝试3
加上 retrieve:true 和 destroy:true 两个参数,并且加上$n.dataTable().fnDestroy();
只可以触发ajax两次,第三次就报错了。谷歌浏览器存在这个问题,IE浏览器,就不会报错了。
5)尝试5
增加“retrieve”属性
然后增加$n.dataTable().fnReloadAjax(); 。
完美解决,无论点击多少次,都会正常调用ajax去后台加载。
http://bbs.csdn.net/topics/391955498?page=1 |
但是如果只加$n.dataTable().fnReloadAjax(); ,不加retrieve属性,虽然也能每次都加载ajax去后台,但是会报错:
但是测试发现,增加“retrieve”属性,然后增加$n.dataTable().fnReloadAjax();。这种方式还是有个问题。
虽然每次都重新加载ajax,但是ajax执行的是url是第一点击时,写入的url(包括后边的?name=XX&type=XX),这样就会有问题。如果我是做统计,每次点击“查询”前,可能修改了查询条件,因此url要重新缀入参数的值,形成一个新的ur。
即url= url+ "?name=" + $(“#name”).val()+ "&type=" + $(“#type”).val()
但是这种方式,并没有执行新的url(url后边的参数值并没有变,后台加断点很容易发现)。
怎么办?
要重新设置一下datatable的ajax成员变量的值,让他去执行最新的url,因为每一次加载url后面的参数可能不同(比如做组合查询时,每次查询,可能要修改查询条件,查询条件的值是缀在url?后面的)。
方法如下:
http://blog.csdn.net/nihaoqiulinhe/article/details/53421230
我的实现代码:
var dataTablesSettings = $n.dataTable().fnSettings();
dataTablesSettings.ajax = {
"url" : href,
"pipe" : true,
"data" : {//因为参数是缀在href?后边的,所以data其实对我来说无用
"XX" : XX,
"XX" : XX
}
};//重新设置url
=====
总结:
0要实现多次加载,都会正常执行ajax去后台,要三个东西。
①retrieve属性
②fnSettings,重新设置url
③fnReloadAjax,重新执行ajax
1retrieve属性的作用,仅仅是,是用来控制不弹出如下错误框。
2jQuery的datatables,执行$("#xxx").dataTable( {···}),默认只会加载一次,即只执行一次ajax去后台。
3要重复加载,即点击一次,调用一次ajax去后台,就要调用$("#xxx").dataTable().fnReloadAjax();但是只执行这个还不行,要重新设置一下datatable的ajax,让他去执行最新的url,因为每一次加载url后面的参数可能不同(比如做组合查询时,每次查询,可能要修改查询条件,查询条件的值是缀在url?后面的)。