#php #jquery #ajax #login #codeigniter-2
#php #jquery #ajax #войти #codeigniter-2
Вопрос:
У меня есть функция входа в систему в моем контроллере, которая вызывалась раньше, но я внес некоторые изменения, и все это просто остановилось.
У меня есть базовый логин с 2 входами для имени пользователя / пароля и отправки
// Javascript
function initLogin(e) {
e.preventDefault()
var d = {
user: $('#userName').val(),
password: $('#password').val()
}
console.log('test')//gets returned
$.post('/cms/login/',d,function(data) {
console.log(data);//nothing returning
},'json');
}
// Контроллер
class CMS extends CI_Controller {
function __construct() {
parent::__construct();
$this->load->helper('url');
$this->load->library('session');
//$this->_check_if_logged_in();
}
private function _check_if_logged_in() {
if (!$this->uri->segment(2) || $this->uri->segment(2) == 'login') return FALSE;
if ($this->session->userdata('logged_in') != TRUE) redirect('/cms');
}
public function index() {
if ($this->session->userdata('logged_in') == TRUE) redirect('/cms/home', 'refresh');
$this->load->view('cms/log_in_view');
$this->load->view('cms/parts/footer');
}
function login() {
echo json_encode(array('test' => 'test'))//doesn't get echoed
$data['user_name'] = $this->input->post('user');
$data['pass_word'] = sha1($this->input->post('password'));
$this->db->select('id');
$res = $this->db->get_where('login',$data,1)->row_array();
if (is_numeric($res['id'])) {
$data['logged_in'] = TRUE;
$this->session->set_userdata('logged_in',TRUE);
}
echo json_encode($res);
}
}
По сути, я прокомментировал все, что, по моему мнению, могло помешать возвращению ответа, но это противоречит всему, что я узнал.
Я убежден, что функция входа в контроллер не вызывается, хотя это было раньше, когда я ничего не менял в самой функции js или login
Ответ №1:
Один недостаток, который я вижу, заключается в том, что если вы не найдете строки, $res['id']
codeigniter выведет ошибку HTML, из-за чего ваше echo json не будет работать должным образом.
Попробуйте if (!empty($res))
вместо этого.
Вы можете проверить с помощью консоли Firebug (аддон в Firefox), что ajax-запрос дал для ответа, чтобы узнать, было ли больше, чем echo’d json.
Редактировать:
Заметил, что это не настоящая проблема. Прочитает его снова.
Попробуйте изменить class CMS extends CI_Controller
на class Cms extends CI_Controller
То есть CMS
-> Cms
Комментарии:
1. нет, по-видимому, ваш первый ответ правильный. $res [‘id’] не найден, поэтому в конечном итоге это приведет к нарушению всей функции. Спасибо
Ответ №2:
Хм, попробуйте изменить URL, я не знаю, может ли это сработать (потому что он должен был вернуть вам сообщение об ошибке в вашей консоли, например, ошибка 500).
Использование «CMS» вместо «cms» не должно быть проблемой, но вы можете попробовать это, как указал @Robin Castlin.
$.post('<?php echo site_url("cms/login");?>',d,function(data) {
console.log(data);//nothing returning
},"json");
или, если вы не можете использовать php здесь, используйте полный URL:
$.post('http://www.yourwebsite.com/index.php/cms/login',d,function(data) {
console.log(data);//nothing returning
},"json");