在grails中从jquery动态获取会话变量

在grails中从jquery动态获取会话变量,jquery,grails,gsp,Jquery,Grails,Gsp,我正在尝试从jquery动态访问会话变量 这是有效的 console.log(${session.application?.sideNavOptions[0]}) 但我需要这样做 var application=$(“#app”).html(); log(“${session.+application+”?.sideNavOptions[0]}”) 可能吗 提前感谢您试图在这里以一种不起作用的方式混合服务器和客户端(如我在评论中所述)。这里有一个替代方案 创建一个简单的控制器,您可以将特定会话变

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

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

但我需要这样做

var application=$(“#app”).html(); log(“${session.+application+”?.sideNavOptions[0]}”)

可能吗


提前感谢

您试图在这里以一种不起作用的方式混合服务器和客户端(如我在评论中所述)。这里有一个替代方案

创建一个简单的控制器,您可以将特定会话变量的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对象的值位于属性“result”下

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

$.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。希望这能有所帮助。

您试图在这里以一种不起作用的方式混合服务器和客户端(如我在评论中所述)。这里有一个替代方案

创建一个简单的控制器,您可以将特定会话变量的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对象的值位于属性“result”下

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

$.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。希望这有帮助。

您不能像在客户端上那样构造会话变量的属性。第一种方法之所以有效,是因为服务器端GSP将值呈现给客户端,然后客户端显示该值。您正在混合使用服务器和客户端,但这样做行不通。有什么替代方法或解决方法?您不能像在客户端上那样构造会话变量的属性。第一种方法之所以有效,是因为服务器端GSP将值呈现给客户端,然后客户端显示该值。您正在混合使用服务器和客户端,但不会像这样工作。有什么替代方案或解决方法吗?谢谢您的回复。我会试试的。很高兴听到。由于这是一个对您有效的解决方案,我建议您接受它作为一个答案,以便其他人可以看到它是。感谢您的回复。我会试试的。很高兴听到。因为这是一个对你有效的解决方案,我建议你接受它作为一个答案,这样其他人就可以看到它是。