Javascript jQuery不返回true或false

Javascript jQuery不返回true或false,javascript,jquery,Javascript,Jquery,所以我这样做: function loginFunc(userNameOrEmail, passWord){ var emailOrUserNameV = encodeURIComponent(userNameOrEmail); var passWordV = encodeURIComponent(passWord); $.getJSON("http://mysite.com/pullData/login.php?callback=?",

所以我这样做:

function loginFunc(userNameOrEmail, passWord){
        var emailOrUserNameV = encodeURIComponent(userNameOrEmail);
        var passWordV = encodeURIComponent(passWord);
        $.getJSON("http://mysite.com/pullData/login.php?callback=?",
              {
                emailOrUserName: emailOrUserNameV,
                passWord: passWordV
              },
              function(recievedData) {
                if(recievedData[0] == 'true'){
                    return true;
                }
                else{
                    return false;
                }

        });

}
$('#loginBtnHtml').click(function(){
            var emailVar = $('#email_html').val();
            var pwdVar = $('#password_html').val();
            if(loginFunc(emailVar, pwdVar)){
                alert('good');
            }
            else{
                alert('bad');
            }

        });
然后我会这样做:

function loginFunc(userNameOrEmail, passWord){
        var emailOrUserNameV = encodeURIComponent(userNameOrEmail);
        var passWordV = encodeURIComponent(passWord);
        $.getJSON("http://mysite.com/pullData/login.php?callback=?",
              {
                emailOrUserName: emailOrUserNameV,
                passWord: passWordV
              },
              function(recievedData) {
                if(recievedData[0] == 'true'){
                    return true;
                }
                else{
                    return false;
                }

        });

}
$('#loginBtnHtml').click(function(){
            var emailVar = $('#email_html').val();
            var pwdVar = $('#password_html').val();
            if(loginFunc(emailVar, pwdVar)){
                alert('good');
            }
            else{
                alert('bad');
            }

        });
如果我使用AlertReceiveDdata[0]运行loginFunc;它工作正常。如何让它将bool返回到$'loginBtnHtml'。单击

当我执行此操作以排除故障时:

$('#loginBtnHtml').click(function(){
            var emailVar = $('#email_html').val();
            var pwdVar = $('#password_html').val();
            var whatIsBeingReturned = loginFunc(emailVar, pwdVar);
            alert(whatIsBeingReturned);

        });

它以“未定义”发出警报。。。不确定我做错了什么。

JSON请求的响应是异步的。logicFunc在JSON请求的响应回调之前返回

您需要编写一个回调方法来处理响应。比如:

function handleResponse(data){ 

     // do something
}


function loginFunc(userNameOrEmail, passWord){
        var emailOrUserNameV = encodeURIComponent(userNameOrEmail);
        var passWordV = encodeURIComponent(passWord);
        $.getJSON("http://mysite.com/pullData/login.php?callback=?",
              {
                emailOrUserName: emailOrUserNameV,
                passWord: passWordV
              },
              handleResponse

        });

}

您无法从ajax返回。除非ajax是同步的,否则不要这样做!您不能依赖于以任何特定顺序执行的代码。所有需要ajax响应的功能都必须在ajax回调中

function loginFunc(userNameOrEmail, passWord){
    ...
    return $.getJSON("http://mysite.com/pullData/login.php?callback=?",
}

$("#loginBtnHtml").on('click', function () {
   //snip
   loginFunc(emailVar, pwdVar).done(function (whatIsBeingReturned) {
      console.log(whatIsBeingReturned);
   });
});

请尝试使用回调函数。AJAX进行同步,完成函数不能向包装函数返回值

function loginFunc(userNameOrEmail, passWord, callbackFn){
        var emailOrUserNameV = encodeURIComponent(userNameOrEmail);
        var passWordV = encodeURIComponent(passWord);
        $.getJSON("http://mysite.com/pullData/login.php?callback=?",{
            emailOrUserName: emailOrUserNameV,
            passWord: passWordV
        }, callbackFn);
}

$('#loginBtnHtml').click(function(){
    var emailVar = $('#email_html').val();
    var pwdVar = $('#password_html').val();

    loginFunc(emailVar, pwdVar, function(recievedData){
        alert(recievedData[0]);
    });

});

+1作为一个优雅的解决方案,它教会了我$when。谢谢@科里-没有必要等到什么时候。直接在返回的jqHXR对象上调用它:loginFuncemailVar,pwdVar.donefunction{}.ohhh!我通常使用不同的AJAX方式,但这是跨域的,所以我使用这种方式,不知道它不是异步的。非常感谢!它快把我逼疯了。它不允许我在8分钟内接受答案。@JosephSilber说得很对,但有些人似乎出于某种原因坚持将回调分开,所以我解决了这个问题preemptively@ExplosionPills-我不明白你在那里说了什么。介意用外行的术语解释一下吗?返回的json是哪种形式的。使用firebug检查您返回的json的格式是否正确,是否在某个json验证器中。