Jump to content
RafaelScharf

ERRO AJAX NO CODEIGNITER

Recommended Posts

Olá, sou inciante em desenvolvimento e estou trabalhando em um sistema de ponto de venda.

 

Quando faço a busca para vincular o cliente na venda ele da erro na requisição Ajax.

 

Quando faço a busca retorna o seguinte erro no console:

GET http://localhost/aroeira/distribuidora/emporium/customers/suggestions?term=R&limit=10&_=1569833733307 404 (Not Found)

[Deprecation] Synchronous XMLHttpRequest on the main thread is deprecated because of its detrimental effects to the end user's experience. For more help, check https://xhr.spec.whatwg.org/.

Veja o código da view/default/pos/add.php

<?php if ($this->input->get('customer')) {?>
        if (!localStorage.getItem('positems')) {
            localStorage.setItem('poscustomer', <?=$this->input->get('customer');?>);
        } else if (!localStorage.getItem('poscustomer')) {
            localStorage.setItem('poscustomer', <?=$customer->id;?>);
        }
        <?php } else {?>
        if (!localStorage.getItem('poscustomer')) {
            localStorage.setItem('poscustomer', <?=$customer->id;?>);
        }
        <?php }
        ?>
        if (!localStorage.getItem('postax2')) {
            localStorage.setItem('postax2', <?=$Settings->default_tax_rate2;?>);
        }
        $('.select').select2({minimumResultsForSearch: 7});
        var cutomers = [{
            id: <?=$customer->id;?>,
            text: '<?=$customer->company == '-' ? $customer->name : $customer->company;?>'
        }];
        $('#poscustomer').val(localStorage.getItem('poscustomer')).select2({
            minimumInputLength: 1,
            data: [],
            initSelection: function (element, callback) {
                $.ajax({
                    type: "get", async: false,
                    url: "<?=site_url('customers/getCustomer')?>/" + $(element).val(),
                    dataType: "json",
                    success: function (data) {
                        callback(data[0]);
                    }
                });
            },
            ajax: {
                url: site.base_url + "customers/suggestions",
                dataType: 'json',
                quietMillis: 15,
                data: function (term, page) {
                    return {
                        term: term,
                        limit: 10
                    };
                },
                results: function (data, page) {
                    if (data.results != null) {
                        return {results: data.results};
                    } else {
                        return {results: [{id: '', text: 'No Match Found'}]};
                    }
                }
            }
        });
        if (KB) {
            display_keyboards();

            var result = false, sct = '';
            $('#poscustomer').on('select2-opening', function () {
                sct = '';
                $('.select2-input').addClass('kb-text');
                display_keyboards();
                $('.select2-input').bind('change.keyboard', function (e, keyboard, el) {
                    if (el && el.value != '' && el.value.length > 0 && sct != el.value) {
                        sct = el.value;
                    }
                    if(!el && sct.length > 0) {
                        $('.select2-input').addClass('select2-active');
                        $.ajax({
                            type: "get",
                            async: false,
                            url: "<?=site_url('customers/suggestions')?>/" + sct,
                            dataType: "json",
                            success: function (res) {
                                if (res.results != null) {
                                    $('#poscustomer').select2({data: res}).select2('open');
                                    $('.select2-input').removeClass('select2-active');
                                } else {
                                    bootbox.alert('no_match_found');
                                    $('#poscustomer').select2('close');
                                    $('#test').click();
                                }
                            }
                            
                        });
                    }
                });
            });

            $('#poscustomer').on('select2-close', function () {
                $('.select2-input').removeClass('kb-text');
                $('#test').click();
                $('select, .select').select2('destroy');
                $('select, .select').select2({minimumResultsForSearch: 7});
            });
            $(document).bind('click', '#test', function () {
                var kb = $('#test').keyboard().getkeyboard();
                kb.close();
                //kb.destroy();
                $('#add-item').focus();
            });

        }

Veja o código do controller Costumer/suggestion

  function suggestions($term = NULL, $limit = NULL)
    {
        // $this->sma->checkPermissions('index');
        if ($this->input->get('term')) {
            $term = $this->input->get('term', TRUE);
        }
        if (strlen($term) < 1) {
            return FALSE;
        }
        $limit = $this->input->get('limit', TRUE);
        $rows['results'] = $this->companies_model->getCustomerSuggestions($term, $limit);
        return $this->sma->send_json($rows);
        
    }

veja agora a model company_model.php

   public function getCustomerSuggestions($term, $limit = 10)
    {
        $this->db->select("id, (CASE WHEN company = '-' THEN name ELSE CONCAT(company, ' (', name, ')') END) as text", FALSE);
        $this->db->where(" (id LIKE '%" . $term . "%' OR name LIKE '%" . $term . "%' OR company LIKE '%" . $term . "%' OR email LIKE '%" . $term . "%' OR phone LIKE '%" . $term . "%') ");
        $q = $this->db->get_where('companies', array('group_name' => 'customer'), $limit);
        if ($q->num_rows() > 0) {
            foreach (($q->result()) as $row) {
                $data[] = $row;
            }

            return $data;
        }
    }

Ja tentei alterar o async: false para async: true e não funcionou. 

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

  • Similar Content

    • By Samuel Pietro
      Olá pessoal!

      Preciso da ajuda de vocês no seguinte!
      Tenho um arquivo retornos.json
       
      { "retornos": [ { "id": 1, "sigla": "00", "nome": "Efetuado" }, { "id": 2, "sigla": "01", "nome": "Inválido" }, { "id": 3, "sigla": "02", "nome": "Corrompido" } ] }
      E na minha aplicação feita com CodeIgniter tenho uma consulta que me mostra a sigla que está cadastrada no BD.
       
      foreach ($results as $r) {  $retorno = $r->codRetorno; } 
      Eu preciso que essa consulta ao me retornar a sigla 02 por exemplo o echo apresente o "nome" para tal "sigla" que esta cadastrada no JSON.

      No caso seria a seguinte lógica: 
      if ("$retorno" == JSON["sigla"]){ echo JSON["nome"];  } //ESTE NÃO É UM CÓDIGO VÁLIDO, É APENAS PARA FINS DE ENTENDER A LÓGICA DO QUE EU PRECISO. // PS. ESSA LOGICA PRECISA SER APLICADA DENTRO DE UM FOREACH COM MILHARES DE REGISTROS.
      Como eu posso fazer isso?
       
    • By buganti
      Olá!
       
      Estou me familiarizando com o codeigniter e desenvolvendo um site, a estrutura dele montei usando o conceito de uma página só, então eu tenho algumas section que ao clicar nos botões do menu a página vai até a section referenciada, porém, me surgiu uma questão, uma dessas section terá referências a outras páginas separadas, por exemplo, terei alguns cards com produtos, ao clicar em algum desses cards abrirá uma nova página com mais detalhes sobre esse produto, aí nessa página o meu será o mesmo, via template, só que ao clicar no botões ele busca as referências das section da página principal (única) e aí não funciona para voltar para lá, como eu deveria fazer essa referência de forma que funciona-se para ambas as situações?
       
      Não sei se fui clara na minha dúvida, se caso for necessário posso tentar me explicar melhor.
       
      Desde já agradeço.
    • By tncardoso
      Fala Pessoal... estou tendo algumas dificuldades num projeto pessoal que estou desenvolvendo com o PHP CodeIgniter.
      Estou tentando mudar o caminho da pagina inicial, para um template que eu baixei e configurei dentro deste projeto.

      Ao fazer isso.. me deparei com o seguinte erro...
      A PHP Error was encountered
      Severity: Notice
      Message: Undefined property: Home::$template
      Filename: controllers/Home.php
      Line Number: 9
      Backtrace:
      File: C:\xampp\htdocs\projects\thiago-cardoso\application\controllers\Home.php
      Line: 9
      Function: _error_handler
      File: C:\xampp\htdocs\projects\thiago-cardoso\index.php
      Line: 315
      Function: require_once
      An uncaught Exception was encountered
      Type: Error
      Message: Call to a member function show() on null
      Filename: C:\xampp\htdocs\projects\thiago-cardoso\application\controllers\Home.php
      Line Number: 9
      Backtrace:
      File: C:\xampp\htdocs\projects\thiago-cardoso\index.php
      Line: 315
      Function: require_once
       
      Em caso de Dúvida, segue aqui também um pouco do arquivo Home.php que estou trabalhando.
      <?php defined('BASEPATH') OR exit('No direct script access allowed');   class Home extends CI_Controller {          public function index()     {         // $this->load->view('home');         $this->template->show('home');     } }  
       
      Aguardo Resposta.
      Obrigado...
       
      Thiago Cardoso
    • By clovis.sardinha
      Pessoal,
      Estou fazendo um relatório no codeigniter, mas não consigo recuperar o retorno da model para a view.  Dou o foreach para utilizar um conjunto de id's que preciso achar em uma tabela, mas o array só recupera o último.
      Controller:
      $destinoterc=$this->triangulomodel->getDestinoterc($origemuser);         $dados['destinoterc']=$destinoterc;         foreach ($destinoterc as &$i){             $origemterc = $i['id'];             $origemtercfinal=$this->triangulomodel->getOrigemterc($origemterc);                                   }         $dados['origterc']= $origemtercfinal;        Model
      public function getOrigemterc($origemterc){ $query =$this->db->query("SELECT * FROM cadastro join tb_cidades on tb_cidades.cid_id=cadastro.cidade_origem where id =$origemterc"); foreach ($query->result_array() as $row) { } return $query->result_array(); }  
      Resultado , só está pegando o último ponteiro da array de origem. Teria que aparecer uns 30 registros.!
      [origterc] => Array ( [0] => Array ( [id_] => 21302 [cidade] => 3233 [cid_nome] => Januaria )  
    • By Cícero Antônio
      Pessoal, estou tento problemas ao recuperar dados de um form do método "post", em um site com certificado SSL. Localmente o site funciona perfeitamente, mas, quando subo pra o servidor os inputs retornam vazios. Trata-se de uma página de login.
       
      Neste projeto estou utilizando a versão 3 do Codeigniter. O site possui certificado SSL.
       
      (Obs.: estou ocultando aqui o nome do site porque estamos em fase de testes)
       
      No application/config.php:
      $config['base_url'] = 'https://www.meusite.com'; No .htaccess:
      RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)$ https://www.meusite.com/index.php/$1 [R,L] No views/login.php:
      <form action="<?php echo base_url('Login') ?>" method="post"> <input type="text" name="usuario" placeholder="Usuário"> <input type="password" name="senha" placeholder="Senha"> <input type="submit" value="Ok" > </form> No controllers:
      $vUsuario = $this->input->post('usuario'); $vSenha = $this->input->post('senha'); (Aqui, o input->post retorna vazio. Se eu mudar o method do formulário para get e utilizar o ->get() também funciona perfeitamente)
      Alguém já passou por isso? Alguma solução?
×

Important Information

Ao usar o fórum, você concorda com nossos Terms of Use.