gpt4 book ai didi

javascript - 如何让我的 jQuery 在每次加载页面时运行,即使是从缓存中运行?

转载 作者:塔克拉玛干 更新时间:2023-11-02 22:36:34 29 4
gpt4 key购买 nike

在我正在开发的网站上,有一个页面在表格中列出了网站上的所有用户(以及一些其他信息)。此页面与登录的每个人(至少在任何给定时间)都相同,除了一个区别 - 他们自己的行被突出显示。所以在我看来,这将是缓存的理想候选者 - 我们不需要每个点击该页面的用户在只有一件事发生变化时重新计算和呈现页面上的数据。

我试图通过向页面添加输出缓存并将表格行的突出显示移动到 JavaScript(一个 jQuery 调用)来解决这个问题——我希望这个页面会被缓存,但 JavaScript 每次都会运行有人点击它,导致他们自己的行被突出显示。然而,情况似乎并非如此。如果我先访问该站点,我的行会突出显示。然后,如果其他人在缓存过期时间内访问该页面(在不同的机器上,因此这不是浏览器缓存的问题),他们会看到该页面突出显示了 my 行而不是他们自己的行,直到缓存过期 - 然后每个人都会看到下一个访问该页面的人突出显示的行,依此类推。它似乎在 JavaScript 执行后 提供页面的缓存版本,而不是提供页面的缓存版本然后运行 ​​JavaScript。

有没有办法做我想做的事情——缓存页面,这样我就不会在每次有人点击页面时都执行 ASP.NET 调用,而是让 JavaScript 在每次加载页面时都重新运行,这样突出显示不同的行?或者,如果不使用 JavaScript,有什么办法可以做到这一点?我考虑过使用 setInterval 定期检查突出显示(并重新突出显示正确的行),但这似乎有点过分,因为这只需要在页面加载后执行一次,并且永远不会再执行,直到页面已重新加载。

以下是我的 aspx 文件的相关部分:

<%@ OutputCache Duration="60" VaryByParam="none" %>

<script type="text/javascript">

jQuery(document).ready(function($) {
var isAuthenticated = ('<%= Context.User.Identity.IsAuthenticated %>' == 'True');

if (isAuthenticated) {
var owner = '<%= Context.User.Identity.Name %>';

$('#' + owner).css("background-color", "#bdf");
}
});

</script>

<table>
<tr>
<th>
Owner
</th>
...
</tr>

<% foreach (var item in Model.Items) { %>

<%= String.Format("<tr id=\"{0}\">", item.Owner) %>
<td>
<%= Html.Encode(item.Owner) %>
</td>
...
</tr>

<% } %>

</table>

最佳答案

在评估 Context.User.Identity.IsAuthenticated 等值后,页面将被缓存。因此,即使 JavaScript 在客户端上执行,它也已经包含缓存中的特定值(您的 值)。

要做到这一点,您可以

  1. 从脚本中完全删除这些值,并执行 AJAX 请求以查看谁登录了。但请记住,如果浏览器禁用了 JavaScript,突出显示将根本不起作用。
  2. 缓存每个用户的页面

关于javascript - 如何让我的 jQuery 在每次加载页面时运行,即使是从缓存中运行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9804319/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com