【问题标题】:passing and acting upon multiple json encoded strings传递并作用于多个 json 编码的字符串
【发布时间】:2012-01-26 14:28:42
【问题描述】:
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
    }
}

【问题讨论】:

    标签: php javascript jquery json codeigniter


    【解决方案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
    );
    

    【讨论】:

    • jQuery 代码不会改变。您仍然检查data.session_statedata.pending
    • 我的意思是我是做一个单独的 ajax 调用还是类似的东西?
    猜你喜欢
    • 1970-01-01
    • 2010-10-04
    • 1970-01-01
    • 1970-01-01
    • 2015-09-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多