In codeigniter How to redirect after login using ajax
我有一个登录弹出窗口Modal。 我正在通过ajax登录
语气
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | <form action="<?php echo base_url('Login');?>" method="POST"> <input type="text" placeholder="Email or Mobile*" value="" id="loginEmail" name="email" class="form-control input-feild"> <input type="password" placeholder="Password*" value="" id="loginPassword" name="password" class="form-control input-feild"> <input type="button" id="l_submit" name="l_submit" value="Login" class="btn btn-primary input-feild"> </form> <p id="error-msg"> </p> |
我正在尝试使用ajax成功登录后重定向。 如果电子邮件和密码正确,则重定向到任何页面。 如果没有,那么它将显示错误。
调节器
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 | function index() { $this->form_validation->set_rules('email', 'Email', 'trim|required'); $this->form_validation->set_rules('password', 'Password', 'trim|required'); if ($this->form_validation->run() == false) { echo validation_errors(); }else { $email = $this->input->post("email"); $password = $this->input->post("password"); $user = $this->Perfect_mdl->check_user($email, $password); if ($user) { $logged_in_data = array(); foreach ($user as $logged_in_data) { $logged_in_data = array( 'id' => $user[0]->id, 'email' => $user[0]->email ); } $this->session->set_userdata($logged_in_data); $id = $this->session->userdata('email'); $data['details'] = $this->Perfect_mdl->get_login_user_detail($id); echo"Yes"; }else { echo"No"; } } } |
这是我的控制器,我正在检查登录用户的电子邮件和密码是否正确/不正确。
这是我的剧本
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | <script type="text/javascript"> $("#l_submit").click(function(){ var email = $("#loginEmail").val(); var password = $("#loginPassword").val(); $.ajax({ url :"<?php echo base_url('Login');?>", type: 'POST', data : {'email':email,'password':password}, success: function(msg) { if (msg =="Yes") window.location.href="<?php echo current_url(); ?>"; else if (msg =="No") $('#error-msg').html('Incorrect Email & Password. Please try again ...'); else $('#error-msg').html('' + msg + ''); } }); return false; }); |
正如您在成功部分中看到的那样,当我输入正确的电子邮件/密码时。 它显示是。 但我想重定向另一个页面,为什么在正确的电子邮件/密码上显示YES。并且在错误的电子邮件/密码上显示NO。
我做错了什么?
您需要在jQuery和Controller函数中更改几行代码。这里我附上你的代码的更新版本。请参考以下内容:
查看(Bootstrap Modal)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | <form action="<?php echo base_url('Login');?>" method="POST"> <input type="text" placeholder="Email or Mobile*" value="" id="loginEmail" name="email" class="form-control input-feild"> <input type="password" placeholder="Password*" value="" id="loginPassword" name="password" class="form-control input-feild"> <input type="button" id="l_submit" name="l_submit" value="Login" class="btn btn-primary input-feild"> </form> <p id="error-msg"> </p> |
这是您的视图文件。它将保持不变。在单击按钮时,您已编写了需要修改的脚本。附加控制器功能后会发现:
调节器
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 | function index() { if (!$this->input->is_ajax_request()) { echo 'No direct script is allowed'; die; } $this->form_validation->set_rules('email', 'Email', 'trim|required'); $this->form_validation->set_rules('password', 'Password', 'trim|required'); if ($this->form_validation->run() == false) { $result['status'] = 'error'; $result['message'] = validation_errors(); }else { $email = $this->input->post("email"); $password = $this->input->post("password"); $user = $this->Perfect_mdl->check_user($email, $password); if ($user) { $logged_in_data = array(); foreach ($user as $logged_in_data) { $logged_in_data = array( 'id' => $user[0]->id, 'email' => $user[0]->email ); } $this->session->set_userdata($logged_in_data); $id = $this->session->userdata('email'); $data['details'] = $this->Perfect_mdl->get_login_user_detail($id); $result['status'] = 'success'; $result['message'] = 'Yeah! You have successfully logged in.'; $result['redirect_url'] = base_url(); }else { $result['status'] = 'error'; $result['message'] = 'Whoops! Incorrect Email & Password. Please try again'; } } $this->output->set_content_type('application/json'); $this->output->set_output(json_encode($result)); $string = $this->output->get_output(); echo $string; exit(); } |
脚本
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | <script type="text/javascript"> $("#l_submit").click(function(){ var email = $("#loginEmail").val(); var password = $("#loginPassword").val(); $.ajax({ url :"<?php echo base_url('Login');?>", type: 'POST', data : {'email':email,'password':password}, success: function(resp) { if (resp.status =="success") window.location.href = resp.redirect_url; else $('#error-msg').html('' + resp.message + ''); } }); return false; }); |
这是正确的答案。如果您遇到任何问题,请告诉我。
检查您的退货数据类型。可能是您可以在Ajax代码中使用数据类型。如果条件,则返回数据无法读取。我面临同样的问题或使用它
if($ .trim(msg)=='是'){
如果要从脚本跳转到另一个控制器/方法,可以在代码中使用简单的
正确的方法是返回一个json文件,所以不要回显是或否,请使用:
1 2 3 4 5 | $response['type'] = 'error'; $response['msg'] = 'Login Succesful'; $response['redirect'] = 'http://your-url.com/controller/method'; echo json_encode($response); die; |
然后,你在ajax调用中处理答案,并且一些好的警报(在我的情况下,Sweet Alert)有点像这样:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | success: function(data) { if (data.redirect) { swal({ title: '?Success!', text: data.msg, timer: 2000, type: data.type, showConfirmButton: false }, function() { window.location.href = data.redirect; }); } else { swal('?Error!', data.msg, data.type); } } |
所以这段代码的作用是,如果你的json响应有一个重定向字段,会在一段时间后触发重定向。但是,如果您的json响应没有字段重定向,则只会显示警报。
将