jstree 3.0.2 动态树总是从缓存中加载数据,而不是重新调用服务器

Posted

技术标签:

【中文标题】jstree 3.0.2 动态树总是从缓存中加载数据,而不是重新调用服务器【英文标题】:jstree 3.0.2 dynamic tree always loading data from cache instead of making a fresh call to server 【发布时间】:2014-10-13 21:22:55 【问题描述】:

我有一个 jstree。在加载页面时,jstree 会从服务器很好地填充,因为它对服务器进行了新的调用,但是之后每当我刷新页面时,它总是会从缓存中获取数据而不是调用服务器,因此总是会获取旧的要填充的数据。我正在使用 jstree 3.0.2 版本。以下是在页面加载时生成 jstree 的代码。

$('#tree').jstree(
'core': 
data:
'url':'getjstree'   // this is the url which will get the json data from the server

);

我们如何解决这个问题以在每次调用时获取新数据,我之前想到的一个解决方案是通过调用来硬刷新的 javascript 代码

location.reload(true);

但这确实刷新了 json 数据,但进入了递归调用,从而挂起了页面。 请帮助我们如何解决这个问题。

【问题讨论】:

【参考方案1】:

JSTree 插件使用键“jstree”将树状态保存在浏览器的 localStorage 中。因此,在调用 jstree 之前,您应该从 localStorage 中删除该密钥,如下所示:

//Removes jstree cached state from localStorage
localStorage.removeItem('jstree');

$('#tree').jstree(
    'core': 
        data:
            'url':'getjstree'
        
    
);

【讨论】:

这适用于最新版本的 jstree @good work #Andre【参考方案2】:

用这个解决了问题

$('#tree').jstree(
'core': 
data:
'cache':false,
'url':'getjstree'   // this is the url which will get the json data from the server

);

【讨论】:

@Sam,看看我关于清理 localStorage 的回答。 奇怪...这个解决方案对我有用,而 @AndréBonna 的解决方案没有。【参考方案3】:

我只是在网址末尾添加了一个随机参数...就像这样

'url' : function(node)
    return "/myrequestpath?randParam="+getRandParam();

                                                

我将 getRandParam 定义为返回 1 到 1000 之间的随机数...如果我使用时间戳,它可能会运行得更好并且更健壮,但这对我有用。请注意,我使用了 url 的函数版本,但它是相同的想法(函数每次都有效,但 url 可能只有在我不确定时才设置)。

【讨论】:

顺便说一句,我认为 AJAX 请求的问题比 JSTree 的问题更大。它显示在 JSTree 上,但真正的问题在于 AJAX。看看***.com/questions/367786/…【参考方案4】:

清除本地存储在 2021 年仍然有效

【讨论】:

这个“新”答案所做的唯一一件事就是重复一半其他答案已经说过的话,包括accepted answer。

以上是关于jstree 3.0.2 动态树总是从缓存中加载数据,而不是重新调用服务器的主要内容,如果未能解决你的问题,请参考以下文章

jstree插件的使用(进阶)——动态json数据创建树

jstree做动态树,json格式传输,存储过程获得datatable之类,不知道如何把datatable转换为需要的json数据格式

JSTREE动态加载子节点

如何从 iframe 源获取 jstree 实例?

双jsTree实现

如何强制 Java Applet 从缓存中加载