javascript片段:
<script type="text/javascript">
$(document).ready(function() {
setInterval(function() {
$.getJSON('notif.php', function(data) {
my_var = '123';
});
alert("my var =" + my_var);
}, 2000);
});
</script>
在chrome和FF控制台中,my_var显示为未定义,但其值显示在警告框中。如果未定义,那么它的val如何
解释是什么?
答案 0 :(得分:2)
jquery中的getJSON默认为asynch
调用,因此alert("my var =" + my_var);
将在不等待ajax调用响应的情况下执行。
在回调函数中移动警报,如
setInterval(function() {
$.getJSON('notif.php', function(data) {
my_var = '123';
alert("my var =" + my_var);
});
}, 2000);
答案 1 :(得分:0)
可变范围是您正在寻找的主题。
变量my_var仅存在于ajax success调用的闭包范围内。
如果您要在更高级别定义my_var,请执行以下操作:
$(document).ready(function(){
var my_var;
...
你可以在你的控制台中看到它。
答案 2 :(得分:0)
Javascript变量声明:
var foo; //sets foo to undefined
console.log(foo) //-> undefined
foo = "bar" //sets foo's value to "bar"
console.log(foo) //-> "bar"
var foo = "bar"; //sets foo to undefined initially, then changes it's value to "bar"
console.log(foo) //-> "bar"
所以在你的情况下:
my_var
的值始终为undefined
,直到为其指定了不同的值。