динамически получить переменную сеанса из jquery в Grails

0

Я пытаюсь получить доступ к переменной сеанса из jquery динамически.

Это работает console.log("$ {session.application?.SideNavOptions [0]}");

Но мне нужно сделать что-то подобное.

var application = $ ("# app"). html(); console.log( "$ {сеанса." + приложение + "?. sideNavOptions [0]}");

Является ли это возможным?

заранее спасибо

  • 0
    Вы не можете создать свойство переменной сеанса таким же образом на клиенте. Причина, по которой работает первый, заключается в том, что GSP на стороне сервера передает значение клиенту, а затем клиент отображает это значение. Вы смешиваете сервер и клиента, и это не сработает.
  • 0
    Что может быть альтернативой или обходным путем для этого?
Теги:
grails
gsp

1 ответ

4
Лучший ответ

Вы пытаетесь смешивать сервер и клиент здесь таким образом, который не будет работать (как указано в моих комментариях). Вот альтернатива.

Создайте простой контроллер, с помощью которого вы можете передавать запросы ajax для определенных переменных сеанса. Контроллер может выглядеть примерно так:

package com.example

import grails.converters.JSON

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

Этот контроллер в основном принимает один параметр под названием "ключ" и возвращает все, что хранится в сеансе с этим ключом. Полученный объект 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 на стороне клиента. Надеюсь это поможет.

  • 0
    Спасибо за ответ. Попробую это.
  • 0
    Это решило проблему. Спасибо
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню