Ir para conteúdo
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. 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar Agora

  • Conteúdo Similar

    • Por clovis.sardinha
      Como fazer para colocar um spinner antes de carregar os dados do bd? Eu clico no link e entra na função do controle e só vai para a página da views quando já está pronto a query. Vi uns exemplos de colocação de spinner, mas se a página ainda não apareceu como faço? Vou anexar a função que chama a página para facilitar. 
      public function inativos()  {     $session = \Config\Services::session();     $pager = \Config\Services::pager();     $usuarios=$this->usuarios->getInativos();//faz a query no bd.     $dados=[         'usuarios'=>$usuarios,         'pager'=>$this->usuarios->pager,     ];     echo view('Admin/Relatorios/listaInativos',$dados); }   
    • Por mark1978
      Boa noite srs, tem o código abaixo e esta funcionando normal e carregando o Qrcode no HTML na soma.
      Porém gostaria de alterar e que fosse da seguinte forma:
      Se "totalServico" for menor que "totalProdutos" e diferente de zero então carregue o Qr Code com esse valor
      Se não o valor for "0,00" carregue o valor "totalProdutos". Essa finalidade é para ter uma opção de desconto.
       
      <?php use Piggly\Pix\StaticPayload; class Os_model extends CI_Model { public function getProdutos($id = null) { $this->db->select('produtos_os.*, produtos.*'); $this->db->from('produtos_os'); $this->db->join('produtos', 'produtos.idProdutos = produtos_os.produtos_id'); $this->db->where('os_id', $id); return $this->db->get()->result(); } public function getServicos($id = null) { $this->db->select('servicos_os.*, servicos.nome, servicos.preco as precoVenda'); $this->db->from('servicos_os'); $this->db->join('servicos', 'servicos.idServicos = servicos_os.servicos_id'); $this->db->where('os_id', $id); return $this->db->get()->result(); } public function valorTotalOS($id = null) { $totalServico = 0; $totalProdutos = 0; if ($servicos = $this->getServicos($id)) { foreach ($servicos as $s) { $totalServico = $totalServico + $s->preco; } } if ($produtos = $this->getProdutos($id)) { foreach ($produtos as $p) { $totalProdutos = $totalProdutos + $p->subTotal; } } return ['totalServico' => $totalServico, 'totalProdutos' => $totalProdutos]; } public function getQrCode($id, $pixKey, $emitente) { if (empty($id) || empty($pixKey) || empty($emitente)) { return; } $result = $this->valorTotalOS($id); $amount = round(floatval($result['totalServico'] + $result['totalProdutos']), 2); if ($amount <= 0) { return; } $pix = (new StaticPayload()) ->applyValidCharacters() ->applyUppercase() ->setPixKey(getPixKeyType($pixKey), $pixKey) ->setMerchantName($emitente->nome, true) ->setMerchantCity($emitente->cidade, true) ->setAmount($amount) ->setTid($id) ->setDescription(sprintf("%s OS %s", $emitente->nome, $id), true); return $pix->getQRCode(); } }  

    • Por 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?
       
    • Por 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.
    • Por 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
×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.