关于jquery post如何工作,一定有一些我不明白的东西,因为下面的代码没有按照我期望的方式运行。
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);
注意两个警报,第一个警报有一个值,第二个是“未定义”为什么?我怎么能绕过这个? $.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);
此代码解决了这个问题,感谢您的快速回复
答案 0 :(得分:2)
$.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);
}
答案 1 :(得分:1)
post方法是异步的,这意味着你的代码以下列方式执行: