2012-01-26 45 views
0
function logsig() { 
    var username = $("#username").val(); 
    var password = $("#password").val(); 
    var dataString = '&username=' + username + '&password=' + password; 
    if(username=='' || password=='') { 
     $('#success').fadeOut(400).hide(); 
     $('#error').fadeOut(400).show(); 
    } else { 
     $.ajax({ 
     type: "POST", 
     dataType: "JSON", 
     url: "<?=base_url()?>index.php/home/logsig", 
     data: dataString, 
     json: {session_state: true}, 
     success: function(data) { 
     if(data.session_state == true) { 
      window.location = "<?=base_url()?>"; 
     } else if(data.session_state == false) { 
      $("#login_failure").fadeIn(400); 
     } 
     } 
    }); 
} 
} 

如何將多個json編碼值傳遞給上述表單。我在做的是如果用戶登錄,'session_state'被傳遞,並且如果用戶有'待處理'帳戶,則'pending'被傳遞。兩個json值都有一個要執行的表達式。傳遞並在多個json編碼的字符串上執行

public function logsig() { 
    header('Content-type:application/json'); 
    $postedEmail = $this->input->post('username'); 
    $password = $this->input->post('password'); 
    $hashedPass = $this->encrypt->sha1($password); 
    $query = $this->db->query("SELECT * FROM users WHERE username = '{$postedEmail}' AND password = '{$password}'"); 
    if ($query->num_rows() > 0) { // if user is already registered and is logging in, execute the following sql/php commands. 
     $row = $query->row(); 
     if ($row->status == "pending") { 
      echo json_encode(array('pending' => true)); 
     } else { 
      echo json_encode(array('pending' => false)); 
     } 
     //$this->session->set_userdata('userid', $idgen); 
     //$this->session->set_userdata('email', $postedEmail); 
     $this->session->set_userdata('logged', "1"); // 1 means user is logged in. 
     echo json_encode(array('session_state' => true)); 
    } else { 
     echo json_encode(array('session_state' => false)); // false sends to jquery that member isn't registered 
    } 
} 

回答

1

您應該收集所有數據並在最後輸出它作爲單個JSON字符串。例如:

$output= array(); 

if ($query->num_rows() > 0) { 
    $row = $query->row(); 

    // Status flag 
    $output['pending'] = $row->status == "pending"; 

    $this->session->set_userdata('logged', "1"); // 1 means user is logged in. 

    // Session state 
    $output['session_state'] = true; 
} 
else { 
    $output['session_state'] = false; 
} 

header('Content-type: application/json'); 
die(json_encode($output)); 

或在這種情況下,甚至更好(優化的真分支):

$row = $query->row(); 
$this->session->set_userdata('logged', "1"); // 1 means user is logged in. 

// Session state 
$output = array(
    'pending'  = $row->status == "pending", 
    'session_state' = false 
); 
+0

好涼。現在我如何在jQuery端傳遞它? –

+0

jQuery代碼不會更改。你仍然檢查'data.session_state'和'data.pending'。 – dfsq

+0

我的意思是我做一個單獨的ajax調用或這種性質的東西? –