无法在 Codeigniter 中获得 ajax 响应



我是codeigniter的新手,正在尝试建立一个登录系统。我的控制器和我的模型工作正常,唯一的问题是 url 发生了变化并且似乎domainName/controller/function我不喜欢,所以我用谷歌搜索并制作了一个 AJAX 函数,但是当我添加 AJAX 时,该函数总是返回错误函数而不是成功函数部分。

我的观点

<!-- <form class="login100-form validate-form" method="POST" action="<?php echo base_url(); ?>welcome/login_validation"> -->
<form class="login100-form validate-form" method="POST" id="login">
<span class="login100-form-title">Member Login</span>
<div class="text-center">
<span class="text-danger"><?php echo $this->session->flashdata("error"); ?></span>  
</div>
<div class="wrap-input100 validate-input" data-validate="Valid email is required: ex@abc.xyz">
<input class="input100" type="email" name="email" id="email" placeholder="Email" value="<?php echo set_value('email'); ?>" >
<span class="focus-input100"></span>
<span class="symbol-input100">
<i class="fa fa-envelope" aria-hidden="true"></i>
</span>
<span class="text-danger"><?php echo form_error('email'); ?></span>
</div>
<div class="wrap-input100 validate-input" data-validate="Password is required">
<input class="input100" type="password" name="password" id="password" placeholder="Password" value="<?php echo set_value('password'); ?>">
<span class="focus-input100"></span>
<span class="symbol-input100">
<i class="fa fa-lock" aria-hidden="true"></i>
</span>
<span class="text-danger"><?php echo form_error('password'); ?></span>
</div>
<div class="container-login100-form-btn">
<button class="login100-form-btn" type="submit">Login</button>
</div>
<div class="text-center p-t-12">
<span class="txt1">Forgot</span>
<a class="txt2" href="">Username / Password?</a>
</div>
<!-- <div class="text-center p-t-136">
<a class="txt2" href="#">
Create your Account
<i class="fa fa-long-arrow-right m-l-5" aria-hidden="true"></i>
</a>
</div> -->
</form>

我的控制器

class Welcome extends CI_Controller {
public function login_validation(){
$this->load->library('form_validation');
$this->form_validation->set_rules('email', 'Email', 'trim|required|valid_email', array(
'required' => '%s feild cannot be empty',
'valid_email' => 'Please Enter a Valid Email'
));
$this->form_validation->set_rules('password', 'Password', 'required');
if($this->form_validation->run()){
$email = $this->input->post('email');
$password = $this->input->post('password');
$this->load->model('main_model');
// $data['can_login'] = $this->main_model->login($email, $password);
echo json_encode($data);
//With Session
if($this->main_model->login($email, $password)){
$user_session = array(
"email" =>  $email
);
$this->session->set_userdata($user_session);
redirect(base_url() . 'welcome/check_user_session');
}
else{
$this->session->set_flashdata('error', 'Invalid Email or Password');
$this->index();
}
}
else{
$this->index();
}
}
public function check_user_session(){
if($this->session->userdata('email') != ''){
// echo $this->session->userdata('email');
redirect(base_url() . 'welcome/user_info');
}
else{
redirect(base_url() . 'welcome/index');
$this->session->set_flashdata('error', 'Your are already loged in');
}
}
}

我的模型

<?php 
defined('BASEPATH') OR exit('No direct script access allowed');
class Main_model extends CI_Model{
public function login($email, $password){
$this->db->where("email", $email);
$this->db->where("password", $password);
$can_login = $this->db->get("users");
if($can_login->num_rows() > 0){
return true;
}
else{
return false;
}
}
}
?>

我的 AJAX 函数

<script type="text/javascript">
$(document).ready(function(){
$('#login').submit(function(e){
e.preventDefault();
// var user_email = $('#email').val();
var user_email = $("input[name='email']").val();
var user_password = $('#password').val();
$.ajax({
method: 'POST',
url: '<?php echo base_url(); ?>welcome/login_validation',
dataType: 'json',
// data: new FormData(this),
data: {
email: user_email,
password: user_password
},
contentType: false,
processData: false,
success: function(res){
alert(res);
alert('Loged In');
},
error: function(data){
//alert('Unsuccessful');
console.log(data);
}
});
});
});
</script>

主要问题(可能还有其他问题(是您在控制器中执行的操作。

响应 ajax 请求的函数必须向服务器返回一些内容。您的 ajax 安装程序希望从服务器获取 JSON。但是您似乎正在尝试(根据情况(加载视图(即'$this->index((;'(或重定向到其他页面。这两个操作都不适合处理 ajax 请求的函数。

login_validation()可能只应该做一件事

echo json_encode($data);

其中$data['can_login']设置为 true 或 false。

回到$ajax.success:你做出相应的回应。

如果你想重定向,你必须使用javascript来完成它。

相关内容

  • 没有找到相关文章