jquery的datatables,第一次加载没问题,再次加载datatables弹窗报错:cannot reinitialise datatable

jquery的datatables,第一次加载没问题,再次加载datatables弹窗报错:cannot reinitialise datatable。

怎么解决?

1网上的解决办法:

jquery的datatables,第一次加载没问题,再次加载datatables弹窗报错:cannot reinitialise datatable_第1张图片

jquery的datatables,第一次加载没问题,再次加载datatables弹窗报错:cannot reinitialise datatable_第2张图片

jquery的datatables,第一次加载没问题,再次加载datatables弹窗报错:cannot reinitialise datatable_第3张图片



2我的尝试。

1)尝试1。

加上 retrieve:true 和 destroy:true 两个参数即可 另见: retrieveOption destroyOption 参数具体含义

http://datatables.club/faqs/


jquery的datatables,第一次加载没问题,再次加载datatables弹窗报错:cannot reinitialise datatable_第4张图片


加上之后,虽然不会报错,还是有个问题,就是ajax只执行一次,再次点击ajax就不触发了,即后台的action只执行了一次。这样肯定是不行的。

2)尝试2

只加上,$n.dataTable().fnDestroy();(注意是dataTable,不是DataTable,注意大小写,不然是无效的方法。dataTable是jQuery的用法,DataTable是amazeui的用法)

只可以触发ajax两次,第三次就报错了。

jquery的datatables,第一次加载没问题,再次加载datatables弹窗报错:cannot reinitialise datatable_第5张图片

我去网上看,可能跟谷歌浏览器有关系,我就将谷歌浏览器换成IE浏览器,就不会报错了。

3)尝试3

加上 retrieve:true 和 destroy:true 两个参数,并且加上$n.dataTable().fnDestroy();

只可以触发ajax两次,第三次就报错了。谷歌浏览器存在这个问题,IE浏览器,就不会报错了。

jquery的datatables,第一次加载没问题,再次加载datatables弹窗报错:cannot reinitialise datatable_第6张图片


5)尝试5

增加“retrieve”属性

然后增加$n.dataTable().fnReloadAjax();

完美解决,无论点击多少次,都会正常调用ajax去后台加载。


http://bbs.csdn.net/topics/391955498?page=1
jquery的datatables,第一次加载没问题,再次加载datatables弹窗报错:cannot reinitialise datatable_第7张图片
jquery的datatables,第一次加载没问题,再次加载datatables弹窗报错:cannot reinitialise datatable_第8张图片

但是如果只加$n.dataTable().fnReloadAjax(); ,不加retrieve属性,虽然也能每次都加载ajax去后台,但是会报错:

jquery的datatables,第一次加载没问题,再次加载datatables弹窗报错:cannot reinitialise datatable_第9张图片

但是测试发现,增加“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

jquery的datatables,第一次加载没问题,再次加载datatables弹窗报错:cannot reinitialise datatable_第10张图片

我的实现代码:

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属性的作用,仅仅是,是用来控制不弹出如下错误框。

jquery的datatables,第一次加载没问题,再次加载datatables弹窗报错:cannot reinitialise datatable_第11张图片

2jQuery的datatables,执行$("#xxx").dataTable( {···}),默认只会加载一次,即只执行一次ajax去后台。


3要重复加载,即点击一次,调用一次ajax去后台,就要调用$("#xxx").dataTable().fnReloadAjax();但是只执行这个还不行,要重新设置一下datatable的ajax,让他去执行最新的url,因为每一次加载url后面的参数可能不同(比如做组合查询时,每次查询,可能要修改查询条件,查询条件的值是缀在url?后面的)。




你可能感兴趣的:(jquery的datatables,第一次加载没问题,再次加载datatables弹窗报错:cannot reinitialise datatable)