【问题标题】:Change session variables without reloading page更改会话变量而不重新加载页面
【发布时间】:2015-02-16 11:33:48
【问题描述】:

所以我的网页有一个链接remove Advertisment,它应该会从我的网站上删除广告,并记住在会话的剩余时间里不要显示任何广告。

我最初的方法是控制器中的私有静态变量,可以通过方法设置。

private static boolean Ads = true;

public static void closeAds() {
    Logger.debug("Ads removed");
    Ads = false;
}

我做了一些研究,发现play框架提供的session()方法可能会更合适。

无论如何我的问题是,我不知道如何在我的 html 页面中调用这些控制器方法,因为每个 HTTP 请求都必须有一个响应并且我不想重新加载我的页面,我只想设置变量或会话变量。

我认为 Ajax 可能是答案?我还想不出什么

【问题讨论】:

  • Ajax 是要走的路。但是您仍然必须在之后重新渲染页面。广告不会神奇地消失。如果您在前端使用 MVC 框架,例如 AngularJS,那么围绕广告进行简单的 ng-show/ng-hide 就可以解决问题。
  • 使用 AJAX 更新会话信息并使用 JavaScript/DHTML 隐藏活动页面上的广告

标签: java html http playframework playframework-2.0


【解决方案1】:

Play 将客户端的会话信息保存在签名的 cookie 中。

所以你有两个选择(我会选择第二个):

1) Ajax 调用来更新 play 的会话数据(因为你不想在客户端用 javascript 修改它,因为它是一个签名的 cookie 并破坏了东西)

2) 再创建一个cookie来保持广告开/关标志,并在客户端通过javascript对其进行修改,然后您可以在服务器端查看该cookie的值来实现广告开/关。这将阻止您进行额外的 ajax 调用。

【讨论】:

    猜你喜欢
    • 2020-04-30
    • 1970-01-01
    • 2011-08-13
    • 1970-01-01
    • 2014-02-12
    • 2016-05-12
    • 1970-01-01
    • 2015-11-02
    • 1970-01-01
    相关资源
    最近更新 更多