2010-06-24 52 views
0

我正在codeigniter網站上工作,客戶已要求隱藏數據表中的價格列,除非用戶輸入正確的密碼(他們會給出正確的密碼通過電話向客戶提供)。Codeigniter - 如何顯示通過ajax輸入密碼後的信息

顯而易見的方法是使用戶登錄,然後顯示包含價格的新表/頁面。

我可以通過AJAX實現嗎?即出現一個對話框,用戶輸入密碼,發送一個請求並添加一個包含價格的新表格?

我是Codeigniter的新手,但我每天都在學習,請有人指點我的方向?

感謝 丹

回答

2

其實它並不是真正的代碼點火器問題,更多的JavaScript。在ci中添加一個控制器函數,通過ajax調用(強烈推薦使用jquery這樣的javascript框架)。

爲了保持簡單,您可以將密碼添加到請求中。控制器功能檢查密碼,如果其正確,則迴應價格。

的JavaScript代碼可能看起來類似的東西:

$.ajax({ 
type: "POST", 
url: 'controller/function', 
data: {'password': $('#password').attr(value)}, 
success: function(data){ 
    $('#price').html(data); 
}, 
}); 
1

你可以通過AJAX實現它:它的工作是這樣的:

1)用戶在框中輸入密碼,然後點擊按鈕

2)點擊事件上按鈕觸發以下內容:

var xmlhttp = new XMLHttpRequest(); 

xmlhttp.open('POST', 'getPrices.php', true); 


xmlhttp.onreadystatechange = function() { 
    if (xmlhttp.readyState == 4) { 
     if (xmlhttp.readState == 200) 
      putPricesIntable(xmlhttp.responseXML) 
    } 
} 

xmlhttp.send('password=' + 'password'); 
0

這個問題對於特定的語言或框架確實很少,但更多的是關於如何最好地解決問題。這種情況下的問題是僅在正確輸入密碼的情況下顯示一列。所以首先你需要有一個允許網站用戶輸入密碼的方法。如何做到這一點再次是毫不相關的,它可能是一個頁面上的表單,或者它可能是一個單獨的頁面。

一旦提交密碼並發現密碼正確,就需要爲用戶創建一個會話。這個會話基本上會告訴頁面是否顯示該列。

您可能不想完全依賴ajax方法,就好像用戶禁用JavaScript一樣,他們將永遠無法看到該列,而只能使用JavaScript來增強網站的可用性。

0

阿賈克斯只是意味着你的登錄控制器將返回一些機器可讀(JSON/XML),而不是HTML。

你的控制器真的只需要設置一個會話變量。

class Login extends Controller { 

    function __construct() { 
      parent::Controller(); 
      $this->load->model('user_m'); 
    } 

    function json_login() { 
     $user = $this->user_m->get_user($_POST['username']); 
     if($user->password == md5($_POST['password'])) { 
      $this->session->set_userdata('username',$user->username); 
      print json_encode($this->user); 
     } 
     else { 
      print json_encode(FALSE); 
     } 
     return; 
    } 

    function logout() { 
     $this->session->destroy(); 
     redirect('/theloginpage'); 
    } 
} 

假設你正在使用jQuery的JavaScript的Ajax調用可以工作是這樣的:

$('#login_form').submit(function(event) { 
    event.preventDefault(); 
    $.ajax({ 
     type:"POST", 
     data:$(this).serialize(), 
     dataType:"json", 
     url:"/login/json_login", 
     success: function(data) { 
      if(data['username'] != null) { 
       $(this).append('<p>You are now logged in</p>'); 
       reload_table_data(); 
      } 
      else if(data == flase){ 
       $(this).append('<p>Fail whale, wrong username or password</p>'); 
      } 

     } 
    }); 

} 

現在顯示的是數據檢查時,如果「用戶名」已在會議中設置。另外不要忘記創建銷燬會話的註銷方法。您可以將表格數據作爲html代碼片段返回,並直接將其插入到DOM或json/xml循環中。

登錄表單可以顯示在頁面上的任何地方,並有大量的jQuery的,道場,原型等庫,它會提供一個對話框。