0

私は codeigniter を使用しています。ユーザーパスワードが存在するかどうかを確認する関数を作成しました。これは私のモデルです

  1. モデル:ユーザー

    public function 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=$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 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');
                }
    
            });
    

問題: Ajax は、返されたユーザー名またはパスワードが false の場合でも、success div をロードします。

4

1 に答える 1

2

応答コードが 200 でない場合に jquery エラーが実行されるため、これは正しい動作です。

1) 成功メソッドで戻り値を解析できます。

例えば

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;
    }
    ...
} 
于 2012-11-22T19:00:29.967 に答える