0

だから私はこれをします:

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');
            }

        });

で実行するloginFunc()と、正常に動作し、 alert(recievedData[0]);bool を に戻すにはどうすればよい$('#loginBtnHtml').click();ですか?

トラブルシューティングのためにこれを行うと:

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

        });

「未定義」で警告します...何が間違っているのかわかりません。

4

3 に答える 3

7

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);
   });
});
于 2013-01-29T03:54:21.340 に答える
3

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

        });

}
于 2013-01-29T03:54:16.090 に答える
1

代わりにコールバック関数を試してください。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]);
    });

});
于 2013-01-29T04:02:15.343 に答える