我在$ .post中初始化了一个值,但无法在$ .post之外访问它

时间:2012-05-21 09:37:27

标签: jquery post

以下是我的代码:

$.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。知道我做错了吗?

非常感谢。

3 个答案:

答案 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