我有以下代码:
$("#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()
之外访问这些值,为此我必须修改什么?
首先,var
在本地范围内定义它们。无需var
,它们可以从全局对象(如window.age
或window.gender
)window
访问。
但是第二个警报不起作用,因为当调用它时,$.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();
});
$.post() 是异步的,因此在获取 age 值之前调用第二个 alert()。
要使其工作,您必须使用允许同步发布 $.ajax()。
年龄在 $.post 的回调上获取值。 和此回调的响应消耗时间。 JavaScript 不要等待 $.post 的响应并立即运行 alert(age)。