1

Webアプリケーションに使用する単純なPHPMVCフレームワークを作成しました。ただし、(jQueryを使用して)AJAXリクエストを実行しようとすると、期待どおりに動作しません。関連するコードの断片は次のとおりです。

意見

<input type="text" name="email" id="email">
<input type="password" name="password" id="password">
<a id="btnlogin">Login</a>

Jquery(別のファイルに配置)

$("#btnlogin").click(function(){
    var email = $("#email").val();
    var password = $("#password").val();

    $.ajax({
        type:"POST",
        url:"user/login",
        data:{email : email, password : password},
        cache:false,
        success:function(){
            alert("suksesssssss");
        }
    });

コントローラー名:ユーザー

public function login()
{
    $email = $_POST['email'];
    $password = $_POST['password'];
    $this->model->login($email,$password);
}

モデル名:UserModel

public function login($email,$password)
{
    $sth = $this->db->prepare("select * from tbl_user where email = :email and password = :password");
    $sth->execute(array(
        ':email' => $email,
        ':password' => Hash::create('sha256', $password, PASSWORD_HASH_KEY)
    ));
    $count = $sth->rowCount();

    if($count > 0)
    {
        $data = $sth->fetch();

        Session::init();
        Session::set('id', $data['id']);
        Session::set('fullName', $data['nama_lengkap']);


        $this->updateLastLogin($data['id']);
        $this->updateLoginCount($data['id']);

        header('location:' . URL . 'user/profile');
    }
    else
    {
        header('location:' . URL . 'home/alogin');
    }
}

私の目標は、ログインが成功したときにプロファイルページにリダイレクトすることです。しかし、関数:

header('location:' . URL . 'user/profile');

これは実行されません。

この動作の原因は何ですか?jQueryを使用して別のページにリダイレクトする方が良いですか?

4

2 に答える 2

10

AJAXを実行しているときに、バックエンドスクリプトを使用して誰かをリダイレクトすることはできません。$ .ajax()成功コールバック内で、リダイレクト先のURLを返す(またはjsを介して決定する)必要があります。

それで:

  header('location:' . URL . 'user/profile');
}
else
{
  header('location:' . URL . 'home/alogin');
}

する必要があります:

  echo json_encode( array( 'redirect' => 'location:' . URL . 'user/profile' ) );
}
else
{
  echo json_encode( array( 'redirect' => 'location:' . URL . 'home/alogin' ) );
}

次に、成功コールバックでデータパラメータを使用します。

$.ajax({
  //...
  success: function(data){
    if( data.redirect ){
      window.location = data.redirect;
    }
  }
});
于 2012-08-15T02:53:46.163 に答える
0

ajax を使用する場合は、コールバック関数を使用するのが一般的です。リダイレクトされない理由は、ajax 呼び出しに対する応答がリダイレクトとして処理されない可能性が最も高いからです。

リダイレクトする代わりにすべきこと

header('location:' . URL . 'user/profile');

URL を返し、javascript コールバック関数を使用してリダイレクトするだけです。

$.ajax(
{
type:"POST",
url:"user/login",
data:{email : email, password : password},
cache:false,
success:function(data)
{
  window.location = data
}
})

それでも失敗する場合は、firebug または chrome をインストールしてください。Inspect element を押して、Web 開発コンソールを起動します。Net または network タブを押します。次に、ログイン ボタンを押して、http 要求が成功したかどうかを確認します。

于 2012-08-15T02:59:58.220 に答える