首页 > 解决方案 > Javascript 文件之间无法访问窗口变量

问题描述

我有两个 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 文件传入的 sessionId 的第二个 js 文件的片段。

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

在此处输入图像描述

任何帮助深表感谢。

谢谢

标签: javascriptclosuresglobal-variables

解决方案


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

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

有关将信息存储时间超过当前文档加载到浏览器中的方法,请参阅在页面加载之间保持变量


推荐阅读