JavaScript文件之间不可访问窗口变量

问题描述 投票:0回答:1

我有两个JavaScript文件来处理我的网页登录功能。第一个js文件对用户进行身份验证,并返回会话令牌,该令牌应传递给第二个js文件以进行会话验证。

这是第一个js文件的代码段。

var Login = window.Login || {};

(function scopeWrapper($) {
    var apiEndPoint = 'https://4pmsdffwl2.execute-api.ap-southeast-2.amazonaws.com/prod';
    Login.sessionId = 'null'
    function signin(username, password, onSuccess, onFailure) {
        let endpoint = apiEndPoint + '/signin'
        let config = {
                  "username": username,
                  "password": password
          }

        return axios.post(endpoint, config)
          .then((res) => {
            Login.sessionId = res.session_id
            console.log(Login.sessionId) \\this prints the session id correctly
            onSuccess(res);
            return Promise.resolve('/')
          })
          .catch((err) => {
            console.error(err)
            onFailure(err)
            return Promise.reject('/')
          })
    }

    $(function onDocReady() {
        $('#signinForm').submit(handleSignin);
    });

    function handleSignin(event) {
        var email = $('#emailInputSignin').val().toLowerCase();
        var username = email;
        var password = $('#passwordInputSignin').val();
        event.preventDefault();
        signin(username, password, email,
            function signinSuccess() {
                console.log('Successfully Logged In');
                window.location.href = 'second.html';
            },
            function signinError(err) {
                alert(err);
            }
        );
    }

}(jQuery));

这个想法是初始化一个全局变量sessionId,该变量通过登录功能使用会话ID更新。

这是第二个js文件的代码段,我试图使用从第一个js文件传入的sessionId。

var Login = window.Login || {};
Login.map = Login.map || {};

(function uploadScopeWrapper($) {
    console.log(Login.sessionId) \\This prints null instead of sessionId
        if (Login.sessionId) {
            window.location.href = 'welcome.html';
        } else {
            window.location.href = 'login.html';
        }
}(jQuery));

我不太确定为什么窗口对象没有使用登录功能中生成的sessionId更新。

此处的plnkr中的示例代码:https://plnkr.co/bYECNY

enter image description here

非常感谢您的帮助。

感谢

javascript closures global-variables
1个回答
0
投票

您正在导航到另一个页面,然后从该另一个页面加载第二个脚本文件。

当您导航到其他页面,同一页面或仅刷新当前页面时,所有全局变量都会丢失。

有关存储信息的时间长于当前文档加载到浏览器中的方式,请参见Persist variables between page loads

© www.soinside.com 2019 - 2024. All rights reserved.