成功重命名事件后刷新 jstree(可能是 WCF 和/或缓存问题?)

发布于 2024-10-07 14:36:13 字数 624 浏览 6 评论 0原文

我有一个 jstree,它使用 JSON 通过 WCF 服务从数据库加载数据。

我设法将 jstree 的重命名上下文菜单项设置为“工作”,这意味着:我将 ajax 调用绑定到 jstree 重命名事件,因此当用户重命名节点时,它会告诉 WCF 方法更新数据库(“保存”新名称)。

问题:如果我转到另一个页面然后再回来,该节点已恢复为旧名称!

看起来好像在 jstree 或浏览器中正在进行某种缓存,或者WCF,并且树没有以某种方式刷新。

数据通过 JSON 上的 WCF 服务方法来自数据库。当您第一次访问该页面时,会加载数据。但是,当您返回该页面时,情况并非如此:服务器端加载方法中的断点永远不会被命中。在我看来,可能是:

  • jstree 已缓存数据并且不会尝试再次加载它(但为什么它不保持重命名?)

或者

  • jstree 询问服务,但 WCF 只是从缓存中再次提供相同的数据而不是实际运行服务方法。

或者

  • 浏览器正在缓存请求并将相同的结果返回给 jstree,而不调用 WCF 方法。

有什么想法吗?我怎样才能检查这个?

I have a jstree that loads it's data from a DB through a WCF service using JSON.

I managed to get jstree's rename context menu item to "work", meaning: I bound an ajax call to the jstree rename event, so when the user renames a node, it tells a WCF method to update the database (to "save" the new name).

Problem: If I go to another page and then come back later, the node has reverted to the old name!

It looks like there is some kind of caching going on, either in jstree or the browser, or WCF, and the tree isn't being refreshed somehow.

The data is coming from a database via a WCF service method over JSON. When you first visit the page, the data is loaded. But when you come back to the page, it isn't: the breakpoint in the server-side load method is never hit. It seems likely to me that either:

  • jstree has cached the data and doesn't try to load it again (but why doesn't it stay renamed?)

OR

  • jstree asks the service, but WCF just gives the same data again from a cache rather than actually running the service method.

OR

  • The browser is caching the request and giving the same result back to jstree without calling the WCF method.

Any ideas? How can I check this?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

被你宠の有点坏 2024-10-14 14:36:13

因为您不确定是否存在缓存问题,所以我建议您在从 jstree 调用的 WCF 方法中包含以下行(例如作为方法主体中的第一行)

WebOperationContext.Current.OutgoingResponse.Headers.Set (
    HttpResponseHeader.CacheControl,
    "max-age=0");

缓存重新验证。因此,可能也会使用的 Web 浏览器或代理不会在服务器上不重新验证(调用相同的 WCF 方法)的情况下使用缓存的数据版本。您还可以考虑使用其他缓存控制选项

Because you not sure whether you have caching problem I suggest you to include in the WCF method which you call from jstree the following line (for example as the first line in the method body):

WebOperationContext.Current.OutgoingResponse.Headers.Set (
    HttpResponseHeader.CacheControl,
    "max-age=0");

It will follow to cache revalidation. So the web browser or a proxy, which probably are also used, will not not use the cached vesrsion of data without revalidation (calling the same WCF method) on the server. You can also consider to use other cache-control options.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文