问一个js关于变量作用域的有关问题,
问一个js关于变量作用域的问题,求助!
请先看这样一个代码段
其中RowAndColumn这个变量只在这里定义,使用过;连续两个alert语句展示出了两个完全不同的结果,第一个alert显示aaaaa,而第二个alert显示的是get语句里面data的值,而我想要的正是第二个alert的结果,为什么会出现这样的情况?
------解决思路----------------------
ajax异步执行还没执行到 RowAndColumn=data;就先执行alert
改成同步的或放回调里
------解决思路----------------------
$.get()在默认情况下是异步执行的,也就是说程序不会等待function(data){RowAndColumn=data;}执行完再执行alert(RowAndColumn+" first ");
它会先执行alert(RowAndColumn+" first ");弹出aaaaa的对话框,
对话框从弹出到用户让其关闭肯定要一定的时间,这段时间function(data){RowAndColumn=data;}就应该执行完了,之后再执行alert(RowAndColumn+" second");时就有了新的值。
解决方法是
或者$.get()改成同步的方法,
请先看这样一个代码段
var RowAndColumn="aaaaa";
$.get(url, {type:"getTable",attribute:"RowAndColumn"},function(data)
{
RowAndColumn=data;
});
alert(RowAndColumn+" first ");
alert(RowAndColumn+" second");
其中RowAndColumn这个变量只在这里定义,使用过;连续两个alert语句展示出了两个完全不同的结果,第一个alert显示aaaaa,而第二个alert显示的是get语句里面data的值,而我想要的正是第二个alert的结果,为什么会出现这样的情况?
------解决思路----------------------
ajax异步执行还没执行到 RowAndColumn=data;就先执行alert
改成同步的或放回调里
var RowAndColumn="aaaaa";
$.get(url, {type:"getTable",attribute:"RowAndColumn"},function(data)
{
RowAndColumn=data;
alert(RowAndColumn+" first ");
alert(RowAndColumn+" second");
});
var RowAndColumn="aaaaa";
$.ajax({
url: url,
async:false,
data:{type:"getTable",attribute:"RowAndColumn"},
success:function(data) {
RowAndColumn=data;
}
});
alert(RowAndColumn+" first ");
alert(RowAndColumn+" second");
------解决思路----------------------
$.get()在默认情况下是异步执行的,也就是说程序不会等待function(data){RowAndColumn=data;}执行完再执行alert(RowAndColumn+" first ");
它会先执行alert(RowAndColumn+" first ");弹出aaaaa的对话框,
对话框从弹出到用户让其关闭肯定要一定的时间,这段时间function(data){RowAndColumn=data;}就应该执行完了,之后再执行alert(RowAndColumn+" second");时就有了新的值。
解决方法是
var RowAndColumn="aaaaa";
$.get(url, {type:"getTable",attribute:"RowAndColumn"},function(data)
{
RowAndColumn=data;
cst();
});
function cst()
{
alert(RowAndColumn);
}
或者$.get()改成同步的方法,