0

Facebookのログイン手順を実装しようとしていますが、機能しません。返されたTRUEを誤って解釈しているように見えるAJAXへのPOSTがあります。そして、ロジックフローを追跡するためにログを全体に配置しましたが、期待どおりにフローしていないようです。問題がわかりますか?

これがAJAXに投稿する私の.jsです

function initUserFbConnect(response){
    console.log("initUserFacebookConnect");
    // checking if the user is in the DB or first visit
    $.post('../ajax/checkFbMember', { facebookId: response.id },
        function(data){
            if(data){
                console.log("trying to set login time");
                $.post('../ajax/setLoginTime', { facebookId:response.id },
                    function(data2){
                        if(data2 == true){
                            console.log("Login time logged");
                        }else{
                            console.log("problem logging time");
                        }
                    }
                );
            }else{
                console.log("returned false from AJAX post");
                console.log(data);
                console.log("you are NOT a FB member");
            }
        }
    );
}

そしてここに../ajax/checkFbMemberがあります

public function checkFbMember()
{
    $facebookId = $this->input->post('facebookId');
    ChromePhp::log("checking checkFBmember " . $facebookId  );
    $this->load->model('Member_model');
    if( $this->Member_model->mCheckFbMember( $facebookId )){
        ChromePhp::log('FB id found in system');
        return TRUE;
    }else{
        ChromePhp::log('FB id NOT found in system');
        return FALSE;
    }
}

これが私のMember_modelです

public function mCheckFbMember( $facebookId )
{
    ChromePhp::log('Inside model and checking');
    $_query = $this->db->query( "SELECT users.id FROM users WHERE users.facebookID=$facebookId" );
    if ( $_query->num_rows() > 0 ){ // user is found
        ChromePhp::log('Inside model and FOUND member');
        return TRUE;
    }else{ // means first visit
        ChromePhp::log('Inside model FAIL');
        return FALSE;  
    }
}

しかし、これは私が記録しているものです..順序は奇妙です

initUserFacebookConnect
returned false from AJAX post  // << this seems to come too early!
// console.log(data) doesn't log anything .. why?
you are NOT a FB member
checking checkFBmember 657322189
Inside model and checking 
Inside model and FOUND member
FB id found in system 

だから私はajaxに投稿しています..モデルをヒットし、コントローラーにTRUEを返します。コントローラーはTRUEをinitUserFbConnectに返します..しかし、どういうわけか、そのPOSTメソッドはFALSEを受け取りますか?それ以上に..他のメソッドが 起動する前に、すぐにスキップして「falseが返されました」と表示されますか?

DBでメンバーを見つけているので、なぜFALSEを返すのか混乱しています。しかし、ロギングが発生する順序についても混乱しています。initUserFbConnectのIFステートメントは、他のすべてが戻った後に解決されることを期待しています。しかし、それは銃を飛び越えているようです。最初にPHPとDBのチェックを行って、TRUE/FALSEを受信したことを確認する必要があります。

誰かが何が起こっているのか説明できますか?

4

1 に答える 1

1

応答には何も戻ってこないようです。

投稿したコードだけから、TRUEまたは関数から戻ってきますが、JavaScriptはページから'dされたFALSEテキストのみを読み取ります。echo

最も簡単な解決策は、からの戻り値に基づいて、echo "TRUE"またはそれに基づいて、 ajax解析を次のように変更することです。"FALSE"checkFbMember()

if (data2 == "TRUE") {
    ...
}
于 2013-01-11T17:15:23.087 に答える