我有一个if语句:
if(authenticate_session("secret_password12345")){
alert("You are authenticated");
}else{
alert("Intruder alert!");
}
和javascript身份验证功能,它对服务器进行jQuery POST AJAX调用以进行实际身份验证,并返回true或false:
function authenticate_session(session_id){
$.post("/auth.php",
{ action: "authenticate_session", login_id: session_id },
function(data){
if(data == "denied"){
alert("denied");
return false;
}else if(data == "accepted"){
alert("accepted");
return true;
}
},
"text");
}
但是,当if语句调用athentication函数时,它不会等待AJAX完成,并且总是执行'else'。如果我添加'return true;'进入认证函数的第一行,在ajax之前,if语句按预期执行=>警告(“您已通过身份验证”)。
我知道服务器端正常运行,因为正在按预期调用警报(“拒绝”)和警报(“已接受”)(但有趣的是,在if语句警报之后)。
如何使if语句等到身份验证功能完成?
谢谢!
答案 0 :(得分:5)
它没有等待,因为默认情况下它是一个异步请求。将async
option设置为false
,使其同步。来自文档:
默认情况下,发送所有请求 异步(即设置为true) 默认情况下)。如果你需要同步 请求,将此选项设置为false。 请注意,同步请求可能 暂时锁定浏览器, 禁用任何操作时 请求已激活。
答案 1 :(得分:3)
我认为你不能让if语句“等待”ajax,只需将这个逻辑移动到ajax回调函数(好吧,你实际上已经做过:alert(拒绝|接受))
答案 2 :(得分:2)
之前说过。 Ajax使这些调用异步。等待它可能会锁定您的浏览器(不需要)。 因此,您应该使用回调方法来处理您的数据。这将使你的代码负责分离正确的东西。
function authenticate_session(session_id, callbacksuccess){
$.post("/auth.php",
{ action: "authenticate_session", login_id: session_id },
callback,
"text");
}
function callback(data) {
if (data == "denied") {
alert('denied');
} else if (data == "accepted") {
alert('accepted');
}
}
authenticate_session('secret_password12345", callback);
答案 3 :(得分:0)
感谢您的所有答案。
答案结果是ajax方法中的返回是从ajax方法返回的,而不是验证函数。