проходя и действуя на нескольких JSON-кодированных строках - PullRequest
0 голосов
/ 26 января 2012
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», а если у пользователя есть «ожидающая» учетная запись, то передается «ожидающий». Оба значения 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 голос
/ 26 января 2012

Вы должны собрать все свои данные и в конце вывести их в виде одной строки 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
);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...