Javascript函数判断对错

时间:2011-12-26 18:21:29

标签: javascript jquery

您好我有这个功能:

function makeTweet(params) {
    var tweetID = params.tweetID;
    var tweetDate = params.tweetUrl;
    var tweetText = params.tweetText;
    var tweetUrl = params.tweetUrl;
    var authorName = params.tweetDate;
    var authorNickname = params.authorNickname;
    var authorAvatar = params.authorAvatar;

    if ( haveOauth() == true ) {
        alert("We have the account, make the reply");
    }else{
        alert("We do not have it");
    }
}

它应该得到以下函数的结果并理解它是返回true还是false并根据它执行某个操作。

我该怎么办?无论我现在做什么,都会返回相同的结果。 这里不对劲。 感谢

function haveOauth() {
    var user_id = "1";
    var data = $.ajax({
        type: "POST",
        url: "uspolitics_pulse/functions.php",
        data: { type: 'checkOauth', user_id: user_id },
        async: false,
        success : function(data) {
            if(data) {
                return false;
            }
        }
    }); 
}

4 个答案:

答案 0 :(得分:1)

永远不建议使用

async: false,但您可以尝试替换

if(data) {
   return false;
}

var result = false;
var data = $.ajax({
    // ...
    success : function(data) {
        result = data;
    }
}); 
return result;

但为什么不让haveOath接受自己的回调

function haveOauth(callback) {
    var user_id = "1";
    var data = $.ajax({
        type: "POST",
        url: "uspolitics_pulse/functions.php",
        data: { type: 'checkOauth', user_id: user_id },
        success : function(data) {
             callback(data);
        }
    }); 
}

然后

function makeTweet(params) {
    var tweetID = params.tweetID;
    var tweetDate = params.tweetUrl;
    var tweetText = params.tweetText;
    var tweetUrl = params.tweetUrl;
    var authorName = params.tweetDate;
    var authorNickname = params.authorNickname;
    var authorAvatar = params.authorAvatar;

    haveOauth(function(data) { 
        if (data) {
           alert("We have the account, make the reply");
        }else{
            alert("We do not have it");
        }
     });
}

答案 1 :(得分:0)

试试这个:

function haveOauth() {
    var result = true;
    var user_id = "1";
    var data = $.ajax({
        type: "POST",
        url: "uspolitics_pulse/functions.php",
        data: { type: 'checkOauth', user_id: user_id },
        async: false,
        success : function(data) {
            if(data) {
                result = false;
            }
        }
    }); 

    return result;
}

答案 2 :(得分:0)

类似于迈克尔·斯旺的回答 - 因为我认为你无法达到真实的情况。

function haveOauth() {
var user_id = "1";
var data = $.ajax({
    type: "POST",
    url: "uspolitics_pulse/functions.php",
    data: { type: 'checkOauth', user_id: user_id },
    async: false,
    success : function(data) {
        if(data) {
            return false;
        }
    }
});
return true;
}

答案 3 :(得分:0)

函数haveOauth包含一个不建议同步的AJAX调用,正如@AdamRackis指出的那样。 (除此之外,传递给return的回调函数中的$.ajax没有达到您想要的效果,并且您在某处错过了return true - 请参阅@MichaelSwan的解决方案。)

您可以使用在haveOauth中传递检查结果的回调来使您的代码异步:

function haveOauth(callback) {
    var user_id = "1";
    $.ajax({
        type: "POST",
        url: "uspolitics_pulse/functions.php",
        data: { type: 'checkOauth', user_id: user_id },
        success : function(data) {
            if (data) { // or whatever check needs to be made
                callback(true);  // signal that authenticated
            } else
                callback(false); // signal that not authenticated
        }
    }); 
}

然后在makeTweet

中使用这样的函数
haveOauth(function(isAuthenticated) {
    if (isAuthenticated)
        alert("We have the account, make the reply");
    else
        alert("We do not have it");
});