传递并作用于多个json编码的字符串

时间:2012-01-26 14:28:42

标签: php javascript jquery json codeigniter

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 个答案:

答案 0 :(得分: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
);