【问题标题】:how to retain javascript variables even if I reload or redirected to any other page即使我重新加载或重定向到任何其他页面,如何保留 javascript 变量
【发布时间】:2012-03-17 09:20:03
【问题描述】:

我创建了一个图像滑块。这个滑块出现在我网站的每个页面上。图像滑块中的每个图像都有一个单击事件。单击任何图像时,都会有一些变量存储与该图像相关的数据(比如艺术家姓名等,这些字段是隐藏的)。

点击任何图片后,页面会被重定向到另一个页面,比如艺术家页面。在艺术家页面中显示存储的数据。图片滑块也出现在艺术家页面中。

现在,问题是当我来到艺术家页面时,变量没有显示,因为再次重新加载了 js 文件并且所有数据都丢失了。两个页面的 Javascript 文件相同。事实上,我网站中的所有页面都应使用相同的 js 文件。但是,如果我单击任何图像,则会在艺术家页面中显示数据。我希望数据即使被重定向到艺术家页面也必须保留和显示。

我已经尝试过 ready() 事件,但没有帮助。怎么做?

附:该网站是使用 Drupal 7 创建的

【问题讨论】:

  • 尝试将数据作为参数传递给新页面,然后在页面加载时将其分配给您的 javascript 变量

标签: javascript jquery drupal-7


【解决方案1】:

我假设您的数据未在服务器端处理。 JavaScript 变量数据不会在每次页面访问时都保持不变。每一页都是全新的开始。

您应该为此使用cookies。 jQuery 也有 cookie 插件,但我还没有尝试过(尝试询问 Google)。另一种方法是使用HTML 5 Web storage,但请注意它是 HTML5,相当新的功能。

基本上你想要做的是:

  1. 点击项目
  2. 在 cookie 中存储数据
  3. 转到下一页
  4. 读取cookie中的数据
  5. 显示

【讨论】:

  • 作为一种猜测,我相信数据正在服务器端处理,正如作者提到的 Drupal 7。隐藏表单字段的使用也向我暗示了 Drupal 式的数据传递方式。但我想 OP 的一些澄清会有所帮助
【解决方案2】:

你不能直接。每次页面加载都会清除 Javascript 状态。

选择是:

  1. 不要重新加载整个页面,而是看看您是否可以做一些 AJAX-y 来替换内容
  2. 使用会话 cookie 保持状态
  3. 如果浏览器支持,请使用 HTML 5 本地存储

【讨论】:

    【解决方案3】:

    有很多方法可以实现这一点,但是,在您的情况下,一种更简单的方法可能是简单地重新检索数据。第一个页面如何能够检索变量?您是否使用 Drupal 的模板引擎将它们传递给客户端?它是否通过 AJAX 获取原始 javascript 数据?

    如果前者为真,您可能需要修改 Drupal 中的模板渲染钩子,以与第一页相同的方式获取数据并将它们传递到新页面。

    如果后者为真,只需使用 jQuery 的 onReady 重新请求数据,就像您提到的那样。您可能仍需要使用 Drupal 模块将数据公开为 Web 服务以供您的 jQuery 获取,或者您可以编写自己的 php 页面/drupal 模块以使用 drupal 的数据库抽象手动从数据库中获取数据。

    【讨论】:

      猜你喜欢
      • 2012-02-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-05-28
      • 2023-03-22
      • 2016-10-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多