Как получить ответ ajax от контроллера codeigniter?

У меня есть контроллер, который отправляет данные в модель, и модель вставляет эти данные в MySQL.

Я хочу знать последний идентификатор вставленной строки, но я хочу, чтобы этот идентификатор в моей функции ajax использовался для дополнения таблицы информацией.

Вот что у меня есть:

Модель:

  public function add($nome, $documento)
  {
    $dados = array (
              'nome' => $nome,
              'documento' => $documento
    );

    $this->db->insert('clientes', $dados);
    return $this->db->insert_id();
  }

Контроллер:

    public function add()
{
    // validar

    $nome = $this->input->post('inputNome');
    $documento = $this->input->post('inputDocumento');
    $this->Cliente_model->add($nome, $documento);
    return "ok";
}

Функция Ajax:

            $(document).ready(function(){
            $("#salvarCliente").click(function(){
                      $.ajax({
                            url: "cliente/add",
                            type: 'POST',
                            data: $("#formCliente").serialize(),
                            success: function(msg){
                                alert(msg);
                                $("#clienteMensagem").html('Cliente cadastrado com sucesso!');
                                $("#table-clientes tr:last").after('<tr><td>'+msg+'</td><td>' + $('#clienteNome').val() + '</td><td>' + $('#clienteDocumento').val() + '</td><td></td></tr>');
                                $("#clienteNome").val('');
                                $("#clienteDocumento").val('');
                            }
                        });
                    return false;
                });
        });

Код добавляет мои данные в mysql, но я не вижу "ok" на контроллере в моем console.log или в своем предупреждении в браузере перед отправкой данных.

Я только хочу вернуть результат "$this->db->insert_id()" из моей модели в мой контроллер и из моего контроллера в мою функцию ajax.

3 ответа

Решение

Изменить следующее:

Контроллер:

 public function add()
  {
      // validar

     $nome = $this->input->post('inputNome');
     $documento = $this->input->post('inputDocumento');
     $res = $this->Cliente_model->add($nome, $documento);
     echo json_encode($res);
 }

Функция Ajax:

        $(document).ready(function(){
        $("#salvarCliente").click(function(){
                  $.ajax({
                        url: "cliente/add",//Enter full URL
                        type: 'POST',
                        dataType: 'JSON',
                        data: $("#formCliente").serialize(),
                        success: function(msg){
                            alert(msg);
                            $("#clienteMensagem").html('Cliente cadastrado com sucesso!');
                            $("#table-clientes tr:last").after('<tr><td>'+msg+'</td><td>' + $('#clienteNome').val() + '</td><td>' + $('#clienteDocumento').val() + '</td><td></td></tr>');
                            $("#clienteNome").val('');
                            $("#clienteDocumento").val('');
                        }
                    });
                return false;
            });
    });

Вы не можете видеть "ок", потому что в параметрах ajax вы не установили dataType. Добавить один параметр dataType:json/html и тогда вы сможете получать данные от контроллера. Что-то вроде этого:

$.ajax({
   url: "cliente/add",
   type: 'POST',
   data: $("#formCliente").serialize(),
   dataType: 'JSON',
   success: function(msg){
           alert(msg);
           }
});

и заменить функцию контроллера в этом

public function add()
{
  // validar
  $nome = $this->input->post('inputNome');
  $documento = $this->input->post('inputDocumento');
  $id = $this->Cliente_model->add($nome, $documento);
  echo json_encode($id);
}

Чтобы сделать его более индивидуальным, вы можете сделать это еще одним способом.

public function add()
{
    // validar

    $nome = $this->input->post('inputNome');
    $documento = $this->input->post('inputDocumento');
    $res = $this->Cliente_model->add($nome, $documento);

    $this->output
     ->set_status_header(200)
     ->set_content_type('application/json', 'utf-8')
     ->set_output(json_encode($res , JSON_PRETTY_PRINT))
     ->_display();
    exit;
}
public function add()
{
    // validar

    $nome = $this->input->post('inputNome');
    $documento = $this->input->post('inputDocumento');
    $insert_id = $this->Cliente_model->add($nome, $documento);
    echo $insert_id; exit;
}
Другие вопросы по тегам