0

jQuery と CodeIgniter を使用してユーザー ログインを検証しようとしています。そのユーザーが見つかった場合、彼は別のページにリダイレクトされるため、ここで試みているのは、ユーザーが間違ったユーザー名またはパスワードを入力したときにエラー メッセージを表示することです。それが私の主な目的です。

ビュー内には、次のコードがあります。

<?php
    $param = 'id="formLogin"';          
    echo form_open('backOffice/loginCheck', $param); 
?>
 <label for="username">* user name</label>
 <input type="text" name="username" id="username" />

 <label for="password">* password</label>
 <input type="password" name="password" id="password" />

  <input type ="submit" name="login" id="login" value ="LOGIN" />
  <?php echo form_close(); ?>

  <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"> </script>
  <script src="<?php echo base_url(); ?>backOffice/js/loginscript.js"></script> 

さて、loginscript.js のコードは次のとおりです。

 btnLogin.on('click', function(errorMessage){
       if(userName.val()!='' &&  password.val() !=''){
          $.ajax({
            type: 'POST',
            url: 'backOffice/loginCheck',
            data: 'formLogin.serialize()',
            success: function(errorMessage){
                console.log('i never get here');
            },
            dataType: 'jsonp'
        });

        e.preventDefault();
        console.log(errorMessage);

       } 
   })

そして最後に、これがコントローラーからのコードです

 public function loginCheck()
    { 

       // set the validation rules
        $this->form_validation->set_rules('username', 'Username', 'required|trim|encode_php_tags');
        $this->form_validation->set_rules('password', 'Password', 'required|trim|encode_php_tags');
        $this->form_validation->set_error_delimiters('<br /><p class=jsdiserr>', '</p><br />');
        if ($this->form_validation->run() != FALSE) 
        {

            $ids=array();
            $ids[0]=$this->db->where('username', $this->input->post('username'));
            $ids[1] = $this->db->where('password', md5($this->input->post('password')));
            $query = $this->backOfficeUsersModel->get();
            if($query)
                {
                    $data = array(
                    'username'       => $this->input->post('username'),
                    'isUserLoggedIn' => true
                    );    
                $this->session->set_userdata($data);
                $data['title'] = "Welcome to dashboard!";
                $data['main_content'] = 'dashboard';
                $this->load->vars($data);
                $this->load->view('backOffice/template');
        } else {   
            $errorMessage = "Wrong Username or Password";
            $this->cms(json_encode($errorMessage));
        }
        } else {

            // form validation fail, send the message
            // form validation to fail, mean that user has javascript disabled
            $errorMessage = "Wrong User Name OR Password.<br /> Please try again!";
           $this->cms(json_encode($errorMessage));
        }



    } // end of function loginCheck 
4

2 に答える 2

0

送信したいデータをフォームに送信するjQueryオブジェクトである必要data: 'formLogin.serialize()',data: formLogin.serialize(),あると思います。formLoginあなたのデータ型はすべきでjsonはないようですjsonp

またerrorMessage、イベントオブジェクトとして持っていますが、呼び出そうとしますe.preventDefault()

于 2012-08-18T07:02:53.537 に答える
0

最初に確認する必要があるのは、いずれerror codeかまたは200応答を示す ajax リクエストです。

ここで として動作している可能性があるため、 2 つ目はbtnLogin.on('click', function(errorMessage){間違っているように見えます。errorMessageevent

3 つ目は次のコードで、errorMessage成功応答にも使用されます。変数名を変更することをお勧めします。

btnLogin.on('click', function(errorMessage){
       if(userName.val()!='' &&  password.val() !=''){
          $.ajax({
            type: 'POST',
            url: 'backOffice/loginCheck',
            data: 'formLogin.serialize()',
            success: function(errorMessage){//here
                console.log('i never get here');
            },
            dataType: 'jsonp'
        });

        e.preventDefault();
        console.log(errorMessage);

       } 
   })

4番目のことはloginCheck()、あなたは次のことをやっています

$this->load->vars($data);
$this->load->view('backOffice/template'); // both link will echo the html part

$errorMessage = "Wrong Username or Password";
$this->cms(json_encode($errorMessage));// json encode works for php array, not for string

私によるとloginCheck()、jsonの代わりに文字列を応答しています。

最後にerror関数を追加しajax()て、エラーも表示されるようにします。詳細については、これを確認してください

于 2012-08-20T05:40:42.393 に答える