[英]In codeigniter How to redirect after login using ajax
我有一個登錄彈出模態。 我正在通過ajax登錄
模態
<div class="modal-body">
<form action="<?php echo base_url('Login');?>" method="POST">
<div class="form-group">
<input type="text" placeholder="Email or Mobile*" value="" id="loginEmail" name="email" class="form-control input-feild">
</div>
<div class="form-group">
<input type="password" placeholder="Password*" value="" id="loginPassword" name="password" class="form-control input-feild">
</div>
<div class="form-group">
<input type="button" id="l_submit" name="l_submit" value="Login" class="btn btn-primary input-feild">
</div>
</form>
<p id="error-msg"></p>
</div>
我嘗試使用ajax成功登錄后進行重定向。 如果電子郵件和密碼正確,則重定向到任何頁面。 如果沒有,它將顯示錯誤。
控制者
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";
}
}
}
這是我正在檢查登錄用戶電子郵件和密碼正確/不正確的控制器。
這是我的劇本
<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('<div class="alert alert-danger text-center">Incorrect Email & Password. Please try again ...</div>');
else
$('#error-msg').html('<div class="alert alert-danger">' + msg + '</div>');
}
});
return false;
});
</script>
正如您在成功部分中看到的那樣,當我輸入正確的電子郵件/密碼時。 它顯示是。 但是我想重定向另一個頁面,為什么在正確的電子郵件/密碼上顯示YES ,而在錯誤的電子郵件/密碼上顯示NO 。
我在哪里做錯了???
您需要在jQuery和Controller函數中更改幾行代碼。 在這里,我附上您代碼的更新版本。 請參考以下內容:
視圖(引導程序模式)
<div class="modal-body">
<form action="<?php echo base_url('Login');?>" method="POST">
<div class="form-group">
<input type="text" placeholder="Email or Mobile*" value="" id="loginEmail" name="email" class="form-control input-feild">
</div>
<div class="form-group">
<input type="password" placeholder="Password*" value="" id="loginPassword" name="password" class="form-control input-feild">
</div>
<div class="form-group">
<input type="button" id="l_submit" name="l_submit" value="Login" class="btn btn-primary input-feild">
</div>
</form>
<p id="error-msg"></p>
</div>
這是您的視圖文件。 它將保持不變。 單擊按鈕后,您編寫了一個腳本,需要對其進行修改。 附加控制器功能后將起作用:
控制者
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();
}
腳本
<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('<div class="alert alert-danger">' + resp.message + '</div>');
}
});
return false;
});
這是正確的答案。 讓我知道您是否遇到任何問題。
如果要從腳本跳轉到另一個控制器/方法,則可以在代碼中使用簡單的redirect()
(位於url幫助器中)。 但是,這不會提醒用戶登錄成功:它只是普通的重定向。
正確的方法是返回一個json文件,因此不要回顯yes或no,請使用以下命令:
$response['type'] = 'error';
$response['msg'] = 'Login Succesful';
$response['redirect'] = 'http://your-url.com/controller/method';
echo json_encode($response);
die;
然后,您在ajax調用中處理答案,並發出一些良好的警報(在我的情況下為Sweet Alert),如下所示:
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響應沒有字段重定向,則只會顯示警報。
檢查您的返回數據類型。 可能是您可以在Ajax代碼中的數據類型中使用。 如果有條件,則返回數據無法讀取。 我面臨相同的問題或使用此
if($。trim(msg)=='是'){
更改echo "Yes";
die("Yes");
。 這將確保在“是”或“否”之后什么都不會發送,然后JS代碼將按預期工作。
成功后,它們也是從控制器重定向的一種方法。 在這種情況下,您只需要按照以下兩個步驟進行重定向即可:在控制器中的此行,當您遇到真實情況並想要重定向時
if($result){
echo base_url()."welcome/";
}
else{
echo 0;
}
在您應用了ajax的html頁面上,在真實情況下,您可以嘗試重定向頁面
success: function(result){
if(result!=0){
// On success redirect.
window.location.replace(result);
}
else
alert('wrong');
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.