当我运行以下代码时,警报弹出窗口显示为undefined。我认为它会返回true或false。请有人解释checkLoginStatus()函数如何执行。感谢。
function checkLoginStatus() {
$.get("func.php", {op:'login_status', r:Math.random()}, function(data) {
if (data == "Yes") {
showSalesView();
return true;
} else {
loginView();
return false;
}
});
}
alert(checkLoginStatus());
答案 0 :(得分:7)
有一些错误。
一,你在函数中执行异步调用,所以当调用返回时,checkLoginStatus已经返回。它基本上是这样的:
function checkLoginStatus() {
$.get("func.php", {
op: 'login_status',
r: Math.random()
}, function(data) {
if (data == "Yes") {
showSalesView();
return true;
} else {
loginView();
return false;
}
});
// return undefined
}
其次,你在另一个函数的回调中返回,因此return会影响回调到$.get
您想要使用回调。所以,
function checkLoginStatus(callback) {
$.get("func.php", {
op: 'login_status',
r: Math.random()
}, function(data) {
if (data == "Yes") {
showSalesView();
callback(true);
} else {
loginView();
callback(false);
}
});
}
然后
checkLoginStatus(function(result) {
alert(result);
});
答案 1 :(得分:1)
AJAX调用是异步的,因此当响应到达时,您指定为回调的函数将被执行。代码不会等待响应退出checkLoginStatus
函数。
您可以使用回调方法显示结果:
function checkLoginStatus(callback) {
$.get("func.php", {op:'login_status', r:Math.random()}, function(data) {
if (data == "Yes") {
showSalesView();
callback(true);
} else {
loginView();
callback(false);
}
});
}
checkLoginStatus(function(status){ alert(status); });
答案 2 :(得分:1)
返回的bool由$.get
函数回调返回,而不是checkLoginStatus
。
function checkLoginStatus() {
$.get("func.php", {op:'login_status', r:Math.random()},
// Start Callback Function
function(data) {
if (data == "Yes") {
showSalesView();
return true;
} else {
loginView();
return false;
}
// End Callback Function
});
}
答案 3 :(得分:1)
你看到的是从.get()函数返回的undefined(void), 请注意.get函数调用包含另一个函数作为第三个参数(第一个是url,第二个是anon对象),它是.get函数结果的“回调”,稍后在结果被调用时调用从服务器返回。