Можно ли прочитать значение динамической переменной, такой как httpRequest.getSession("attr_name"), из JavaScript?
Может ли JavaScript читать объект HTTP Session?
Ответы (2)
(Под Javascript я предполагаю, что вы имеете в виду клиентский скрипт в браузере.)
Нет, это невозможно. Содержимое объекта Session никогда не покидает сервер, поэтому клиентский сценарий не может напрямую считывать данные Session.
Если вы хотите получить к нему доступ в браузере, вы должны прочитать данные из объекта Session и отправить их вместе с ответом (например, в скрытом поле) или предоставить веб-службу, которая считывает данные из объекта Session и возвращается в браузер.
Как я уже сказал в своем комментарии, единственным способом будет какой-то вызов Ajax и запросить его с сервера. Я не знаю, какой бэкэнд вы используете, вот как бы я сделал это в Asp.net MVC и jQuery.
(Если есть мелкие синтаксические ошибки, извиняюсь - не перед компилятором)
public class HomeController : Controller
{
//abstract the session code away, don't let the evil javascript touch
//it directly. Ideally this would all be in a seperate logic class or something.
public string NameAttribute
{
get
{
return Session["attr_name"] as string ?? string.empty;
}
}
[HttpGet]
public string GetNameAttribute()
{
return NameAttribute;
}
public ActionResult Index()
{
return View();
}
}
<script>
$(function(){
$.get( 'home/GetNameAttribute', function( response ) {
var name = response; //don't forget error checking, ommited
});
});
</script>
В качестве альтернативы вы всегда можете записать нужные вам значения в скрытые поля и прочитать их с помощью обычного javascript.