0

以下是我的代码:

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

非常感谢帮助。

4

3 回答 3

2

您在 post 回调中声明了变量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方法返回一个promise jQuery 1.5)你也可以这样做

$.when($.post(...).done(function(num) {
   alert(num)
});
于 2012-05-21T09:39:32.877 回答
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);
    }
);
于 2012-05-21T09:38:37.823 回答
0

由于您num仅在其中声明,$.post()因此在全局范围内不可用。

这是对函数和范围的深入解释:https ://developer.mozilla.org/en/JavaScript/Reference/Functions_and_function_scope

于 2012-05-21T09:40:29.117 回答