【问题标题】:Variable is undefined when returning to previous page返回上一页时变量未定义
【发布时间】:2016-11-14 01:22:21
【问题描述】:

我在使变量未定义时遇到问题。基本上,当我转到另一个页面然后单击浏览器时,变量未定义并且脚本停止工作。但是,如果我刷新浏览器,它确实适用于初始加载。

//player admin callback
function getPlayerAdmin(admin_callback){
    var admin_data = false;
    var formData = {
        'player_id' : $('#post-v').attr('data-val')
    };

    $.ajax({
        type: 'post',
        url: '/popins/player/controls',
        data : formData,
        dataType : 'json',
        success: function(data) {
            admin_callback(data); 
        },
        error : function(jqXHR, textStatus, errorThrown){
            console.log(jqXHR);
        }
    });
}

//load youtube videos
function loadPlayerVideos(){
    var player_id = $('#post-v').attr('data-val');

    //get admin
    getPlayerAdmin(function(output) {

        console.log(JSON.stringify(output));

        if(output.controls.is_admin == true){
            admin_data = true;
        }else{
            admin_data = false;
        }
    });
}

返回的数据是:

{"controls":{"is_admin":true}}

我的问题是我得到一个“未捕获的 ReferenceError: admin_data is not defined”。

有人知道为什么变量未定义吗?

谢谢!

【问题讨论】:

    标签: javascript jquery function callback


    【解决方案1】:

    我之前也遇到过同样的问题。我认为这不是浏览器问题(我们谈论的是会话,即只读服务器端,在客户端上你只有令牌来识别你的会话)。

    猜猜当你返回时服务器代码没有被执行(浏览器缓存了页面并且只会加载图片或javascript之类的资产)。 您可以使用 localStorage

    改进这种检查客户端的行为

    例子:

     localStorage.setItem('is_admin', 'true'); 
    

    然后在 page1 中,添加这个客户端:

     if(localStorage.getItem('is_admin') === 'true'){
    
     } 
    

    这个应该可以正常工作。希望对您有所帮助!

    【讨论】:

    • 感谢您的简单解释。我应该担心这总是存储在本地存储中吗?我必须在某个时候清除它吗?
    • @christopher.web localStorage 对象存储没有过期日期的数据。浏览器关闭时数据不会被删除
    • 嗯,好吧,我将如何删除数据?这东西的最佳做法是什么?
    猜你喜欢
    • 2020-08-21
    • 1970-01-01
    • 2012-01-16
    • 2020-11-29
    • 1970-01-01
    • 1970-01-01
    • 2019-05-03
    • 2016-05-03
    • 2016-05-13
    相关资源
    最近更新 更多