这应该很简单。但是我试图编写的代码即使在浏览互联网之后也无法正常工作。
所以我有这个。用于检查用户是在线还是离线的代码。
//Check if it's a valid user
function checkUser(){
status = (function(){
var isOnline = null;
$.ajax({
async: false,
global: false,
type: "POST",
url: "./system/checkUser.php",
data: $("#webcam").serialize(),
success: function(data){
isOnline = (data == "1");
}
});
return isOnline;
})();
return status;
}
这就是我尝试使用它的方式
function loadProfile(){
var text = checkUser();
alert(text);
if(text != true){
alert("Invalid user!");
return;
}else{
//Code
}
但是无论我从checkUser()得到什么,我总是得到“无效的用户!”警报,即使文本是真的。有人能帮我一下吗?我迷失了语言。
答案 0 :(得分:3)
从jQuery 1.8开始,不推荐使用async:false和jqXHR($ .Deferred);您必须使用success / error / complete回调选项而不是jqXHR对象的相应方法,例如jqXHR.done()或不推荐使用的jqXHR.success()。
http://api.jquery.com/jquery.ajax/
你能做的是:
function checkUser(callback){
$.ajax({
global: false,
type: "POST",
url: "./system/checkUser.php",
data: $("#webcam").serialize(),
success: callback
})
}
function loadProfile(){
checkUser(function(text){
alert(text);
if(text != true){
alert("Invalid user!");
return;
}else{
//Code
}
});
}
答案 1 :(得分:1)
async: false
,因此您必须使用回调来访问ajax请求中的数据。
您可以更改checkUser
函数,以便将成功回调作为参数。
我个人不喜欢使用大回调,所以我通常用$ .Deferred来解决问题:
function checkUser() {
status = $.Deferred();
$.ajax({
global: false,
type: "POST",
url: "./system/checkUser.php",
data: $("#webcam").serialize(),
success: function(data) {
status.resolve(data == "1");
}
});
return status;
}
function loadProfile() {
var textD = checkUser();
textD.done(function (text) {
alert(text);
if(text != true){
alert("Invalid user!");
}
});
}