ajax返回true而FALSE

时间:2012-11-22 18:53:06

标签: php jquery ajax codeigniter function

我正在使用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. 控制器

    public function check_password(){
            $ USERNAME = $这 - > URI->链段(3);         $ temp_pass = $ this-> input-> post('current_password');         $密码= MD5($ temp_pass);         $这 - >用户> get_some_password($用户名,密码$);

    }
    
    1. 视图上的ajax
    2. //在页面加载时完成

      var success1 = $(“。success”); //如果成功则显示视图上的div         var error1 = $(“。error”); //如果出现错误,则显示视图上的div         success1.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');
                  }
      
              });
      

      问题:即使返回的用户名或密码为false,Ajax也会加载成功div,我错过了什么

1 个答案:

答案 0 :(得分:2)

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

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

e.g。

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

2)您可以从服务器404,500,503返回错误代码...触发执行错误功能。

e.g。

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;
    }
    ...
}