Javascript忽略了true和false

时间:2014-02-08 03:50:47

标签: javascript jquery

这应该很简单。但是我试图编写的代码即使在浏览互联网之后也无法正常工作。

所以我有这个。用于检查用户是在线还是离线的代码。

//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()得到什么,我总是得到“无效的用户!”警报,即使文本是真的。有人能帮我一下吗?我迷失了语言。

2 个答案:

答案 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!");
        }
    });
}