JSON,Jquery问题在函数之间传递变量

时间:2011-09-13 12:15:42

标签: jquery json

我有以下代码,它使用getJSON

检索变量hf
$.getJSON('../scripts/json.php', function(json) {
    var user_function = json.hf;
});

我有以下auto_refresh函数

// Refresh dashboard stats
var auto_refresh = setInterval(function(){
    $('#today').load('index.php #today');
    $('#_7days').load('index.php #_7days');
    $('#_30days').load('index.php #_30days');
    $('#allTime').load('index.php #allTime');
    $('#sidebar').load('../' + user_function + '/index.php #sidemenu', function() {
        $('#sidebar li:not(.complete)').each(function () {
            if($('a', this).attr('href') == document.URL) {
                $(this).toggleClass('inactive active');
            }
        });
    });
}, 20000);

我想将getJSON调用中的变量user_function传递给auto_refresh,但继续回到'undefined'

2 个答案:

答案 0 :(得分:2)

这里有两个问题。

问题#1:超出范围。

您在匿名函数中实例化var user_function。由于javascript具有功能级别范围,因此您的自动刷新功能无权查看此变量。

解决方案:在两个函数之外实例化user_function:

var user_function;
$.getJSON('../scripts/json.php', function(json) {
    user_function = json.hf;
});
var auto_refresh = setInterval(function(){
    //access user_function
}, 20000);

不幸的是,由于您遇到第二个问题,这不能完全解决您的问题。

问题#2:异步

因为user_func是根据某个ajax respone设置的,所以在这个ajax响应返回之前,代码的其余部分将无法访问它。这意味着您需要确保需要user_func的任何逻辑的启动都发生在回调中。

解决方案:

var user_function;
$.getJSON('../scripts/json.php', function(json) {
    user_function = json.hf;
    createAutoRefresh();
});

function createAutoRefresh() {
    var auto_refresh = setInterval(function(){
        //access user_function
    }, 20000);
}

答案 1 :(得分:0)

我怀疑user_function变量在调用auto_refresh函数之前将超出范围。

尝试在JSON回调中调用auto_refresh函数。