Передача переменной контроллеру из 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);
}
Author: Mariano, 2016-12-21

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);
}
 2
Author: Juan Pinzón, 2016-12-21 17:00:44