我初始化内$。员额值,但外界$。员额

问题描述:

不能访问它下面是我的代码:

$.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。任何想法我做错了什么?

非常感谢。

你声明的变量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) 
}); 
+0

如果有人解释downvote,我可以改进我的答案(和我自己) – fcalderan

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); 
    } 
); 
+1

此外,应该牢记,那'$ .post'是 - 异步。 – Sirko

+0

那我该怎么做才能把这个价值拿到外面去呢? – guitarlass

+0

谢谢,有没有别的办法? – guitarlass

既然你宣布num只在$.post()它无法在全球范围内。

这里的功能和范围进行深入的解释:https://developer.mozilla.org/en/JavaScript/Reference/Functions_and_function_scope