我已经关注了代码:
$("#get_details").click(function(){
name = $("#user_name").val();
var age,gender;
$.post("users.php", { name: name },
function(data){
if (data.status == 'success'){
age = data.message[0];
gender = data.message[1];
alert(age); //getting output
}
}, "json");
alert(age);//doesn't getting output
});
我想在$.post()
之外访问这些值,这是我要修改的内容吗?
答案 0 :(得分:1)
首先,var
在本地范围内定义它们。如果没有var
,则可以从window
访问全局对象(例如window.age
或window.gender
)。
但是你的第二个警报不起作用,因为当它被调用时,$.post
还没有完成,因为它是异步的。你可以这样做:
$("#get_details").click(function(){
var name = $("#user_name").val();
var age,gender;
var json_ready = false;
$.post("users.php", { name: name },function(data){
json_ready = true;
if (!data.status == 'success') return;
age = data.message[0];
gender = data.message[1];
}, "json");
var json_alert = function(){
if(!json_ready) return setTimeout(function(){ json_alert(); },1000);
alert('gender: '+gender+', age: '+age);
}
json_alert();
});
答案 1 :(得分:0)
$ .post()是异步的,因此在获得age的值之前会调用第二个alert()。
为了使它工作,你必须使用$ .ajax(),它允许同步发布。
答案 2 :(得分:0)
年龄获得$ .post回调的价值。并且这个回调的响应消耗时间。 javascript不要等待$ .post的响应并立即运行alert(年龄)。