Получить SessionID через WebMethod из VB.NET в JavaScript

1

Я немного незнаю, что следующий код просто не работает:

Код-за:

<WebMethod(EnableSession:=True)>
Public Shared Function GetSessionID() As String
    Dim sID = HttpContext.Current.Session.SessionID
    Debug.WriteLine(sID)
    Return sID
End Function

JavaScript:

var sID;

function init() {
    sID = PageMethods.GetSessionID();
...

Очевидно, что sID присутствует и отображается на выходе debug, но в JavaScript sID содержит "undefined", потому что функция возвращает "undefined" при исполнении в консоли Firebug. Что там происходит?

Теги:
webmethod
pagemethods
sessionid

2 ответа

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

Вам необходимо определить OnSuccess вызов OnSuccess для ваших PageMethods следующим образом:

var sID;

function init() {
    PageMethods.GetSessionID(OnSuccess);
}

function OnSuccess(response, userContext, methodName) {
    sID = response;
    alert(sID);
}

Рекомендации:

  • 0
    Да, это делает трюк! Я почему-то никогда не читаю об этом на страницах MS. Большое спасибо :)
  • 0
    Пожалуйста. Я не смог найти официальную ссылку, чтобы добавить в ответ. Это вероятно похоронено где-то в бесконечных страницах MSDN;)
0

Ваш код выглядит нормально. Откуда вы вызываете функцию? Попробуйте определить переменную внутри функции:

function init() {
    var sID = PageMethods.GetSessionID();
}

Если вы пытаетесь прочитать sessionID, почему бы просто не читать прямо из файла cookie?

JavaScript

function readCookie(name) {
  var nameEQ = escape(name) + '=',
    ca = document.cookie.split(';'),
    i = 0,
    c;
  for (i = 0; i < ca.length; i++) {
    c = ca[i];
    while (c.charAt(0) === ' ') { c = c.substring(1, c.length); }
    if (c.indexOf(nameEQ) === 0) { return unescape(c.substring(nameEQ.length, c.length)); }
  }
  return null;
}

var sID = readCookie('ASP.NET_SessionId');
  • 0
    то же самое "неопределенное" поведение при помещении var в init (). init () на самом деле вызывается из класса _Default в Default.aspx.vb и пока работает хорошо, потому что остальная часть JS выполняется как положено. Ваш пример Cookie дает мне «ноль», потому что это то, что он возвращает. Куки на самом деле не вариант. Я до сих пор пытаюсь заставить его как-то работать сначала, но использование куки не может быть ответом

Ещё вопросы

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