【问题标题】:dynamically get session variable from jquery in grails从grails中的jquery动态获取会话变量
【发布时间】:2014-05-05 19:46:14
【问题描述】:

我正在尝试从 jquery 动态访问会话变量。

这是有效的 console.log("${session.application?.sideNavOptions[0]}");

但我需要做这样的事情。

var 应用程序 = $("#app").html(); console.log("${session."+application+"?.sideNavOptions[0]}");

有可能吗?

提前致谢

【问题讨论】:

  • 不能像在客户端那样构造会话变量的属性。第一个起作用的原因是因为服务器端 GSP 将值呈现给客户端,然后客户端显示该值。您正在混合服务器和客户端,这不会像那样工作。
  • 有什么替代方法或解决方法?

标签: jquery grails gsp


【解决方案1】:

您正在尝试以一种行不通的方式混合服务器和客户端(如我的 cmets 所述)。这是另一种选择。

创建一个简单的控制器,您可以将 ajax 请求传递给特定会话变量。控制器可能看起来像这样

package com.example

import grails.converters.JSON

class MySimpleController {
  def gimmieValue() {
     String value = session["${param.key}"] as String
     render [result: value] as JSON
  }
}

这个控制器基本上接受一个名为“key”的参数,并将返回会话中存储的任何内容。生成的 JSON 对象具有属性“结果”下的值。

使用此控制器的客户端代码可能如下所示:

$.ajax({
  dataType: "json",
  url: "${createLink(controller: 'mySimple', action: 'gimmieValue')}",
  data: { key: "the-key-from-the-session-you-want" },
  success: function(data) {
    console.log("The server says that the value is: " + data.result);
  }
}

这是一个非常简单的示例,您应该了解您实际上是通过此控制器打开整个会话存储。这构成了安全威胁。我建议您锁定控制器中可以返回和不能返回的键,而不是只允许任何键(如我所示)。

这假设您也在客户端使用 jQuery。希望这会有所帮助。

【讨论】:

  • 感谢您的回复。会试试看。
  • 很高兴听到。由于这是一个适合您的解决方案,我建议您接受它作为答案,以便其他人可以看到它。
猜你喜欢
  • 1970-01-01
  • 2016-10-29
  • 2018-01-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-10-31
  • 1970-01-01
相关资源
最近更新 更多