2012-01-26 10 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

すべてのデータを収集し、最後に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

私は、別のアヤックスコールやそのような性質のものを作るのですか? –

関連する問題