我有以下代码,它使用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'
答案 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
函数。