【问题标题】:ajax returning true while FALSEajax 在 FALSE 时返回 true
【发布时间】:2012-11-11 04:46:42
【问题描述】:

我正在使用 codeigniter,我编写了一个函数来检查用户密码是否存在。这是我的模型

  1. 模型:用户

    公共函数 get_some_password($username,$password) {

        $this->db->where('user_password', $password);
        $this->db->where('user_username',$username);
        $query=$this->db->get('some_users_table');
        if($query->num_rows()==1){
            return true;
        }else{
            return false;
        }
    
  2. 控制器

    公共函数 check_password() {
    $username=$this->uri->segment(3); $temp_pass= $this->input->post('current_password'); $password=md5($temp_pass); $this->user->get_some_password($username,$password);

    }
    
    1. 视图上的 ajax

    //页面加载完成

    var 成功1 = $(".success"); //成功时出现的视图上的div var error1 = $(".error"); //如果错误出现在视图上的一个div 成功1.hide(); error1.hide();

        $('#change_password').click(function() {
            var username = $('#username').val();
            dataString2 = $('#changpassword').serialize();
            $.ajax({
                type: "POST",
                url: '<?php echo base_url(); ?>controller_name/check_password/' + username,
                data: dataString2,
                success: function() {
                    $('.success').html('password successfully updated!'),
                            success1.slideDown('slow');
    
                },
                error: function() {
                    $('.error').html('Wrong current password!'),
                            error1.slideDown('slow');
                }
    
            });
    

问题:即使返回的用户名或密码为假,Ajax 也会加载成功 div,我哪里漏掉了什么

【问题讨论】:

    标签: php jquery ajax codeigniter function


    【解决方案1】:

    这是正确的行为,因为响应代码不是 200 时会执行 jquery 错误:

    1) 可以在success方法中解析返回值。

    例如

    success: function(data) {
        if (data == 'true') {
            // Success
        } else {
            // Error
        }
    }
    

    2)您可以从服务器404、500、503...返回错误代码来触发错误函数的执行。

    例如

    header("Status: 404 Not Found");
    

    注意:标头应在任何输出完成之前执行。

    在您的控制器中尝试:

    public function check_password() {
        $username=$this->uri->segment(3); 
        $temp_pass= $this->input->post('current_password'); 
        $password=md5($temp_pass); 
        if(!$this->user->get_some_password($username,$password)) {
            $this->output->set_status_header('500');
            return;
        }
        ...
    } 
    

    【讨论】:

    • 我在哪里设置标题状态?
    • @Alphy 没有使用 codeignater,但看起来可以帮助你 codeigniter.com/user_guide/libraries/output.html$this-&gt;output-&gt;set_status_header() 部分
    • 我已经在上面尝试过你的代码,现在即使为真,它也只会返回 false,我还设置了标题
    • 你用了什么代码?它应该是 php fix 或 javascript fix,而不是两者。
    • success: function(data) { if (data == 'true') { // Success } else { // Error } }
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-03-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-20
    相关资源
    最近更新 更多