以下是我的代码:
$.post(
"index.php?component=static_content&action=rules_count",
{ region:rname,page_url:page_url},
function(data1) {
alert(data1);
var num = $(data1).find('.ruleNum').html();
}
);
alert(num);
但是在alert(num);
行上有一个错误num is undefined
。知道我做错了吗?
非常感谢。
答案 0 :(得分:2)
你在帖子回调中声明了变量num
,所以在该函数之外变量显然是未定义的
但是即使你在外面定义它,它的值也不会像你期望的那样显示,因为ajax是异步的(因此,当你警告变量时,ajax调用仍在运行)
如果你需要访问num甚至外部只是调用另一个传递变量的函数,例如
$.post(
"index.php?component=static_content&action=rules_count",
{ region:rname,page_url:page_url},
function(data1) {
alert(data1);
continueProcess(data1);
}
});
var continueProcess = function(num) {
alert(num);
}
或使用Deferred Objects
(因为ajax方法返回jQuery 1.5
以来的承诺)你也可以
$.when($.post(...).done(function(num) {
alert(num)
});
答案 1 :(得分:1)
num
是传递给$.post()
的匿名函数中的局部变量。它不存在于函数的范围之外,但是你从一个完全不同的范围访问它。
除此之外,变量将在以后定义,而不是在您使用它时定义。如果它是一个全局变量,它在您使用它时仍然不可用,因为它只会在 POST操作完成后定义。
因此,您只能在该功能中使用num
。以下是您可以做的一个示例:
function numWasReceived(num) {
alert(num);
}
$.post(
"index.php?component=static_content&action=rules_count",
{ region:rname,page_url:page_url},
function(data1) {
alert(data1);
var num = $(data1).find('.ruleNum').html();
numWasReceived(num);
}
);
答案 2 :(得分:0)
由于您仅在num
中声明$.post()
,因此在全球范围内无法使用{{1}}。
以下是对功能和范围的深入解释:https://developer.mozilla.org/en/JavaScript/Reference/Functions_and_function_scope