2012-08-15 45 views
1

我做了一個簡單的PHP MVC框架,我用我的Web應用程序。但是,試圖AJAX請求時(用jQuery),它並沒有如預期的行爲。下面是代碼中的相關片段:jQuery的AJAX不運行良好在我的PHP MVC

查看

<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重定向到另一個頁面,它會更好嗎?

回答

10

你不能做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; 
    } 
    } 
}); 
+0

是的,它工作!更好的辦法是使用回調函數..感謝.. – 2012-08-15 03:38:23

+0

好極了!樂於幫助。 – 2012-08-15 03:39:29

0

當使用AJAX它被普遍使用一個回叫功能。你是不是重定向振振有辭是moast可能的答案recived你的Ajax調用從未處理爲重定向。

你應該做的,而不是重定向到

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

回報的網址是什麼,並使用JavaScript callbackFunction參數簡單地說重定向:如果這仍然失敗,然後安裝Firebug的或鍍鉻

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

。按檢查元素調出Web開發控制檯按網絡或網絡選項卡。然後按登錄按鈕,然後選擇是否獲得成功的http請求。

相關問題