【问题标题】:jstree 3.0.2 dynamic tree always loading data from cache instead of making a fresh call to serverjstree 3.0.2 动态树总是从缓存中加载数据,而不是重新调用服务器
【发布时间】: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 数据,但进入了递归调用,从而挂起了页面。 请帮助我们如何解决这个问题。

【问题讨论】:

    标签: ajax caching getjson jstree


    【解决方案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 可能只有在我不确定时才设置)。

    【讨论】:

    【解决方案4】:

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

    【讨论】:

    • 这个“新”答案所做的唯一一件事就是重复一半其他答案已经说过的话,包括accepted answer
    猜你喜欢
    • 2016-10-26
    • 1970-01-01
    • 1970-01-01
    • 2012-12-16
    • 1970-01-01
    • 2011-11-14
    • 2019-07-23
    • 2017-04-02
    • 2016-11-27
    相关资源
    最近更新 更多