2017-01-06 2 views
0

Я пытаюсь включить AJAX в свою работу. Я хочу, чтобы он регистрировал пользователя, как только была нажата кнопка входа в систему. Ниже приведен соответствующий код. Вид вызывает функцию входа в мой контроллер.Вход AJAX и codeigniter

Посмотреть

<form id="loginform" class="navbar-form navbar-right" action="https://siteurl/CI/index.php/postedLinks/login" method="post" role="search"> 
    <div class="form-group"> 
    <input type="text" name="username" class="form-control" placeholder="Username"> 
    <input type="password" name="password" class="form-control" placeholder="Password"> 
    </div> 
    <button type="submit" class="btn btn-default">Login</button> 
</form> 

Контроллер

public function login(){ 
$this->form_validation->set_rules('username','Username', 'trim|required'); 
$this->form_validation->set_rules('password','Password', 'trim|required|callback_check_login'); 
if ($this->form_validation->run()==false) { 
$data['links'] = $this->links_model->get_links(); 
$this->load->view('postedLinks', $data); 

}else{ 
    redirect(site_url('postedLinks'), 'refresh'); 
}} 

public function check_login($password){ 

    $username = $this->input->post('username'); 
    $result = $this->links_model->login($username,$password); 
    if ($result) { 
     $sess_array = array(); 
     foreach ($result as $row) { 
      $sess_array = $arrayName = array('id' => $row->id, 'username' => $row->username); 
      $this->session->set_userdata('logged_in', $sess_array); 

     } 
     return true;  
    } else{ 

     $this->form_validation->set_message('check_login', 'Invalid Username or Password'); 
     return false; 
    } 
} 

Это прекрасно работает, однако мне нужно добавить Аякса в него, однако, когда я пытаюсь это никогда не работает. Любая помощь приветствуется. Ниже я попытался разместить на мой взгляд.

$(document).ready(function() { 

    // process the form 
    $('#loginform').submit(function(event) { 

     // get the form data 
     // there are many ways to get this data using jQuery (you can use the class or id also) 
     // process the form 

     $.ajax({ 
     url : "https://siteurl/CI/index.php/postedLinks/login" 
     type : "POST", 
     dataType : "json", 
     data : {"username" : username, "password" : password}, 
     success : function(data) { 
      // do something 
     }, 
     error : function(data) { 
      // do something 
     } 
    }); 
     // stop the form from submitting the normal way and refreshing the page 
     event.preventDefault(); 
    }); 

+0

Итак, вы хотите вставить данные о своем пользователе при нажатии кнопки отправки справа? –

+0

Я понял это так, как он хотел бы, чтобы форма входа была выполнена через AJAX вместо обычного запроса POST и последующей смены страницы. ??? – Juned

+0

Я отредактировал эту ссылку, также да, что я хочу сделать – ZeeSoft

ответ

0

Вы не изменили JavaScript в любом случае, чтобы показать нам свою попытку. Приведенный ниже код должен работать, чтобы передать имя пользователя и пароль контроллеру входа, но вам нужно будет решить, что делать после входа пользователя в систему. Вам также придется выводить некоторые JSON из контроллера входа, чтобы сообщить ему логин был успешным. Обратите внимание: я добавил теги идентификаторов в форму HTML, чтобы выбрать входные значения через jQuery.

<html> 
    <head> 
     <link rel="stylesheet" type="text/css" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css"> 
    </head> 
    <body> 
     <form id="loginform" class="navbar-form navbar-right" action="https://siteurl/CI/index.php/postedLinks/login" method="post" role="search"> 
      <div class="form-group"> 
      <input id="uname" type="text" name="username" class="form-control" placeholder="Username"> 
      <input id="pass" type="password" name="password" class="form-control" placeholder="Password"> 
      </div> 
      <button type="submit" class="btn btn-default">Login</button> 
     </form> 

     <script> 
      document.addEventListener("DOMContentLoaded", function(event) { 

       // process the form 
       $('#loginform').submit(function(event) { 

        // get the form data 
        // note, I've added ID tags to your form above 

       var u = $('#uname').val(); 
       var p = $('#pass').val(); 

        $.ajax({ 
         url : "https://siteurl/CI/index.php/postedLinks/login", //enter the login controller URL here 
         type : "POST", 
         dataType : "json", 
         data : { 
          username : u, 
          password : p 
          }, 
         success : function(data) { 
          // do something, e.g. hide the login form or whatever 
          alert('logged in'); 
         }, 
         error : function(data) { 
          // do something 
          alert('pooped the bed'); 
         } 
        }); 
        // stop the form from submitting the normal way and refreshing the page 
        return false; 
       }); 
      }); 
     </script> 

     <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script> 
     <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script> 
    </body> 
</html> 
+0

спасибо, я дал ему снимок, но все, что я получил, было вашим сообщением об ошибке, разоренным на кровати .. lol. Я поставил функцию входа в систему в фрагмент выше, если это будет любая помощь. – ZeeSoft

0
your problem is your controller: 

ваш Аякса код вызова function login в контроллере и передать две переменные к ней, но ваш login function не получить их, функция Логин должен выглядеть так:

public function login($Variable_one,$Variable_two) 
0

Вот фрагмент одной из форм ajax, которые я использую.

$("#form1").submit(function() { 
    var data = $("#form1").serialize(); 
    //alert(data); return false; 
    $.ajax({ 
     url: "/forms/form1", 
     data: data, 
     type: "POST", 
    success: function(msg) { 
      if (msg) { 
       $("#display").html(msg); 
      } else { 
       $("#display").text("nothing came back For some reason"); 
      } 
     } 
    }); 
    return false; 
}); 

Вы сериализуете данные своей формы. Вы не используете json, вы используете сообщение. Вам не нужно включать длинный URL-адрес вашего почтового метода или URL-адреса, просто используйте контроллер и метод, Codeigniter помещает в base_url сам по себе. Попробуйте это так

Вам также не нужно предотвращать по умолчанию. Просто используйте return false