Передача переменной контроллеру из AJAX в CodeIgniter
у меня есть следующая проблема, в представлении я получаю данные пользователя через foreach
, и одним из них является код, который по ссылке я запускаю функцию, которую я передаю в качестве параметра тот же код:
<a href="" onclick="cargarID(<?=$fila->Id_usuario?>)"><?=$fila->Id_usuario?></a></td>
функция отправляет идентификатор в метод моего контроллера:
<script type="text/javascript">
function cargarID(id= null){
if(id) {
$.ajax({
url:"http://localhost/sistema/usuario_consulta/getID/"+id,
type:"POST",
dataType: 'json',
success:function(respuesta){
window.location.href = "http://localhost/sistema/usuario_consulta/index";
}
});
}
}
</script>
это мой контроллер, я делаю это, потому что мне нужно отправить параметр в запрос, который у меня есть в модели.
function index()
{
$this->load->view('guest/section');
$datos['arrPerfil'] = $this->model_usuario->consulta();
$this->load->view('user/usuario_view', $datos);
}
public function getID($id)
{
if($id) {
$data = $this->model_usuario->consulta($id);
echo json_encode($data);
}
}
в модели у меня есть следующее код:
function consulta($id){
$query = $this->db-> query("select Id_usuario, nombre, telefono from usuario where Id_usuario ='".$id."'");
if ($query->num_rows() > 0) {
return $query->result();
}
}
где мне нужен этот параметр, чтобы рһекутировать запрос, а затем вернуть его в массив в index контроллера
function index()
{
$datos['arrPerfil'] = $this->model_usuario->consulta();
$this->load->view('user/usuario_view', $datos);
}
1 answers
Предполагая, что следующая строка работает:
<a href="" onclick="cargarID(<?=$fila->Id_usuario?>)"><?=$fila->Id_usuario?></a>
И идентификатор пользователя правильно поступает.
Ваша функция
function cargarID(id= null){
if(id) {
$.ajax({
url:"http://localhost/sistema/usuario_consulta/getID/"+id,
type:"POST",
dataType: 'json',
success:function(respuesta){
window.location.href = "http://localhost/sistema/usuario_consulta/index";
}
});
}
}
Неправильно в части вызова ajax, в частности в:
type:"POST",
Вы отправляете запрос post
и в вашем контроллере в CodeIgniter то, что вы ожидаете, это запрос get
public function getID($id)
{
if($id) {
$data = $this->model_usuario->consulta($id);
echo json_encode($data);
}
}
Я не знаю, что возвращает ваш запрос в model_usario
, но там вы должны вернуть массив, который вы можете перебрать с помощью jquery или javascript.
Что вы можете сделать, это изменить тип запроса в вызове ajax с POST
на GET
, или я бы рекомендовал вам сделать это с помощью POST
, а также изменить свой контроллер в codeigniter, чтобы у вас был больший контроль над данными, которые вы отправляете.
Например, ваш вызов ajax останется:
function cargarID(id){
if(id != null) {
$.ajax({
url:"http://localhost/sistema/usuario_consulta/getID",
type:"POST",
dataType: 'json',
data: {'id_persona': id},
success:function(respuesta){
window.location.href = "http://localhost/sistema/usuario_consulta/index";
}
});
}
}
И ваша функция getID
в контроллере останется:
public function getID()
{
$id = $this->input->post("id_persona");
if($id != null) {
$data = $this->model_usuario->consulta($id);
header('Content-Type: application/json');
echo json_encode($data);
}
}
EDIT
Я не понимаю, что вы хотите сделать, так что вы используете ajax, если нет вы собираетесь использовать этот идентификатор в этом вызове, проблема в том, что вы не получаете идентификатор в функцию index вашего контроллера, если вы просто хотите, чтобы вы могли сделать это прямо в своей link.
Например
<a href="<?php echo site_url()."/usuario_consulta/index/". $fila->Id_usuario;?>"> <?=$fila->Id_usuario?> </a>
Затем ваша функция index будет выглядеть так:
function index($id){
$datos['arrPerfil'] = $this->model_usuario->consulta($id);
$this->load->view('user/usuario_view', $datos);
}