【问题标题】:Get SessionID via WebMethod from VB.NET to JavaScript通过 WebMethod 从 VB.NET 获取 SessionID 到 JavaScript
【发布时间】:2017-10-24 07:39:12
【问题描述】:

以下代码无法正常工作,我有点不知所措:

代码隐藏:

<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 显然存在并显示在调试输出中,但在 JavaScript 中 sID 持有“未定义”,因为该函数在 Firebug 控制台中执行时返回“未定义”。那里发生了什么?

【问题讨论】:

    标签: javascript vb.net webmethod sessionid pagemethods


    【解决方案1】:

    您需要像这样定义PageMethodsOnSuccess 回调:

    var sID;
    
    function init() {
        PageMethods.GetSessionID(OnSuccess);
    }
    
    function OnSuccess(response, userContext, methodName) {
        sID = response;
        alert(sID);
    }
    

    参考资料:

    【讨论】:

    • 是的,这就行了!不知何故,我从未在 MS Pages 上读过任何关于此的内容。非常感谢:)
    • 不客气。我找不到要在答案中添加的官方参考。它可能被埋在无限的 MSDN 页面中的某个地方;)
    【解决方案2】:

    您的代码看起来不错。你从哪里调用函数?尝试在函数内部定义变量:

    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');
    

    【讨论】:

    • 将 var 放入 init() 时出现相同的“未定义”行为。 init() 实际上是从 Default.aspx.vb 中的 _Default 类调用的,到目前为止运行良好,因为 JS 的其余部分按预期执行。您的 Cookie 示例给了我“null”,因为这就是它返回的内容。饼干实际上是没有选择的。我仍然尝试让它以某种方式开始工作,但使用 cookie 不是答案
    猜你喜欢
    • 2011-10-03
    • 1970-01-01
    • 1970-01-01
    • 2011-05-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-08
    相关资源
    最近更新 更多