Javascript 变量在jquerypost之后被清除

Javascript 变量在jquerypost之后被清除,javascript,jquery,Javascript,Jquery,关于jQueryPost的工作原理,我一定有一些不明白的地方,因为下面的代码的行为与我预期的不一样 var list = []; $.post("list", function(data){ for(var i = 0; i < data.length; i++){ list.push({label: data[i].label, value: data[i].value}); alert(list[0].value); } }); aler

关于jQueryPost的工作原理,我一定有一些不明白的地方,因为下面的代码的行为与我预期的不一样

var list = [];
$.post("list", function(data){
    for(var i = 0; i < data.length; i++){
        list.push({label: data[i].label, value: data[i].value});
        alert(list[0].value);
    }
});
alert(list[0].value);
var list=[];
$.post(“列表”,函数(数据){
对于(变量i=0;i
注意这两个警报,第一个警报有一个值,第二个警报是“未定义”为什么?我怎样才能避开这件事?我对$.get和$.ajax也有同样的问题,所以我一定是做错了什么。我试着找了一下,但什么也没找到

更新:

var templeList = [];
$.ajax({
        url: "templeList", 
        type: 'GET',
        success: function(data){
            for(var i = 0; i < data.length; i++){
                templeList.push({label: data[i].label, value: data[i].value});
                alert(templeList[0].value);
            }
        },
        cache: true,
        async:false
});
alert(templeList[0].value);
var templeList=[];
$.ajax({
url:“模板列表”,
键入:“GET”,
成功:功能(数据){
对于(变量i=0;i

这段代码解决了这个问题,这要感谢快速响应。
$中的函数。post
是一个回调——它异步运行(从服务器收到响应后)。这意味着在设置
list
之前,第二个警报实际上首先被调用

为了避免这种情况,您通常会将第二个警报放在它自己的函数中,然后从异步回调中调用该函数:

var list = [];
$.post("list", function(data){
    for(var i = 0; i < data.length; i++){
        list.push({label: data[i].label, value: data[i].value});
        alert(list[0].value);
    }
    onReady();
});

function onReady() {
    alert(list[0].value);
}
var list=[];
$.post(“列表”,函数(数据){
对于(变量i=0;i
中的函数
$.post
是一个回调函数——它异步运行(从服务器收到响应后)。这意味着在设置
list
之前,第二个警报实际上首先被调用

为了避免这种情况,您通常会将第二个警报放在它自己的函数中,然后从异步回调中调用该函数:

var list = [];
$.post("list", function(data){
    for(var i = 0; i < data.length; i++){
        list.push({label: data[i].label, value: data[i].value});
        alert(list[0].value);
    }
    onReady();
});

function onReady() {
    alert(list[0].value);
}
var list=[];
$.post(“列表”,函数(数据){
对于(变量i=0;i
中的函数
$.post
是一个回调函数——它异步运行(从服务器收到响应后)。这意味着在设置
list
之前,第二个警报实际上首先被调用

为了避免这种情况,您通常会将第二个警报放在它自己的函数中,然后从异步回调中调用该函数:

var list = [];
$.post("list", function(data){
    for(var i = 0; i < data.length; i++){
        list.push({label: data[i].label, value: data[i].value});
        alert(list[0].value);
    }
    onReady();
});

function onReady() {
    alert(list[0].value);
}
var list=[];
$.post(“列表”,函数(数据){
对于(变量i=0;i
中的函数
$.post
是一个回调函数——它异步运行(从服务器收到响应后)。这意味着在设置
list
之前,第二个警报实际上首先被调用

为了避免这种情况,您通常会将第二个警报放在它自己的函数中,然后从异步回调中调用该函数:

var list = [];
$.post("list", function(data){
    for(var i = 0; i < data.length; i++){
        list.push({label: data[i].label, value: data[i].value});
        alert(list[0].value);
    }
    onReady();
});

function onReady() {
    alert(list[0].value);
}
var list=[];
$.post(“列表”,函数(数据){
对于(变量i=0;i
post方法是异步方法,这意味着您的代码以以下方式执行:

  • 初始化空列表
  • 向服务器发送请求
  • 尝试使用空列表发出警报
  • 当数据到达一段时间后,您的函数将真正被调用
  • 列表已填充,“第一”警报将提供正确的结果

  • post方法是异步方法,这意味着您的代码以以下方式执行:

  • 初始化空列表
  • 向服务器发送请求
  • 尝试使用空列表发出警报
  • 当数据到达一段时间后,您的函数将真正被调用
  • 列表已填充,“第一”警报将提供正确的结果

  • post方法是异步方法,这意味着您的代码以以下方式执行:

  • 初始化空列表
  • 向服务器发送请求
  • 尝试使用空列表发出警报
  • 当数据到达一段时间后,您的函数将真正被调用
  • 列表已填充,“第一”警报将提供正确的结果

  • post方法是异步方法,这意味着您的代码以以下方式执行:

  • 初始化空列表
  • 向服务器发送请求
  • 尝试使用空列表发出警报
  • 当数据到达一段时间后,您的函数将真正被调用
  • 列表已填充,“第一”警报将提供正确的结果

  • Ajax是异步的。。。我当然知道这一点,但没有想到这在本例中意味着什么。Ajax是异步的。哦。。。我当然知道这一点,但没有想到这在本例中意味着什么。Ajax是异步的。哦。。。我当然知道这一点,但没有想到这在本例中意味着什么。Ajax是异步的。哦。。。我当然知道这一点,但没有想到这在这种情况下意味着什么。