Jump to content
danluc

Busca Produtos

Recommended Posts

Tenho esse codigo:

$('#busca').keyup(function(){
      var buscaTexto = $(this).val();
      if(buscaTexto.length >= 3){
        $.ajax({
          method: 'post',
          url: '{{ route('site.index.newBusca') }}',
          data: {_token: $('meta[name=csrf-token]').attr('content'), texto: buscaTexto},
          dataType: 'json',
          beforeSend: function() {
            $("#resultado_busca").html("Carregando..."); //Carregando
          },
          success: function(retorno){
            if(retorno.qtd == 0){
              $('#resultado_busca').html('<p>Não encontramos resultados para sua busca</p>');
            }else{
              console.log(retorno);
              $('#resultado_busca').html(retorno.ID);
            }

            //Limpar Status de Carregando
            $("#resultado_busca").html("<a href='#'>"+retorno.dados+"</a>");
            
          }
        });
      }
    });

recebo nessa pagina:

public function newBusca(Request $request){
		$query = $request['texto'];
		if(!$query && $query == '') return Response::json(array(), 400);
		$products = CartProduto::produtos($query, $this->_cnpj);
		$data = array_merge($products);
		$data['qtd'] = count($data);
		foreach ($data as $dado) {
			$dado->dados .= '<a href="#" id="'.$dado->ID.':'.$dado->PRECO.'">'.$dado->ID.'</a>';
		}
		return $data;
	}

ele me retorna esse json:

{"0":{"NOMEFANTASIA":"576 MR, UN, 01 - PRETO FOSCO \/ HASTE INTERNO PRETO PONTEIRA PRETO","dados":"<a href=\"#\" id=\"38802:82.0\">38802<\/a>","PRECO":"82.0","url":"\/representante\/Add-Cart\/38802?cnpj=","ID":"38802","SITUACAO":"1","ALIQUOTA":"5.0"},"1":{"NOMEFANTASIA":"576 MR, UN, 02 - BLACK7 FOSCO \/ HASTE INTERNO BLACK 7 PONTEIRA AZUL ESCURO","dados":"<a href=\"#\" id=\"38803:82.0\">38803<\/a>","PRECO":"82.0","url":"\/representante\/Add-Cart\/38803?cnpj=","ID":"38803","SITUACAO":"1","ALIQUOTA":"5.0"},"2":{"NOMEFANTASIA":"576 MR, UN, 04 - CINZA+AZUL C\/ CRISTAL INTERNO C\/  PONTEIRA PRATA","dados":"<a href=\"#\" id=\"39306:82.0\">39306<\/a>","PRECO":"82.0","url":"\/representante\/Add-Cart\/39306?cnpj=","ID":"39306","SITUACAO":"1","ALIQUOTA":"5.0"},"qtd":3}

só que na minha view (Página não aparece nada).

quando dou um console.log() recebo os resultados, mas no meu html não aparece. 

Share this post


Link to post
Share on other sites
3 horas atrás, danluc disse:

 

?

 

Evite 'bump' topics, 'up'. 

 

 

Da um 

console.log($('#resultado_busca'))

Veja onde está o elemento da tela.

Tente 'mockar' os dados.

 

Você mesmo pelo terminal do console: 

 

Chrome:

Ctrl + shift + J

Mozilla:

Ctrl + shift + K

 

 

//console.log(retorno.ID); //Pegar os dados que vem....
$('#resultado_busca').html('INSERIR_MOCKADOS');

 

Share this post


Link to post
Share on other sites

Cara, eu to certo de que eu já tive esse problema mas não consigo lembrar como eu resolvi :/

 

Faz o que o @gabrieldarezzo falou, testa inserir qualquer conteúdo dentro do seletor e vê se altera. Se não alterar, sugiro tu dar uma limpada na função de sucesso do retorno da consulta ajax e tenta realizar algumas alterações no DOM pra vê se tem algum efeito. Se mesmo assim não rolar, tenta fazer uma requisição assíncrona. Não vi seu código por completo, mas dependendo da forma como você o estruturou, mudar o tipo da requisição pode resolver seu problema, porém, você tem que analisar se essa é a decisão correta.

Share this post


Link to post
Share on other sites

Descobrir em partes, quando coloco assim : 

retorno[0].NOMEFANTASIA

ele me retorna apenas um, como o nome do produto certo.

como faço para ele da um laço aqui:

$('#resultado_busca').html("<a href='#'>"+retorno[i].NOMEFANTASIA+"</a>");

?

Share this post


Link to post
Share on other sites

Resolvi assim.

 

              $.each(retorno, function(i, item) {
                //console.log(item.dados);
                $('#resultado_busca').append(item.dados);               
              })

Agradeço a todos que ajudaram.

  • +1 2

Share this post


Link to post
Share on other sites

Ele me retorna a parti do 3 caractere digitado, certo.

más quando digito 4 ou  mais caracteres, ele vai me trazendo o resultado toda vez, ai fica duplicando, triplicando, quadruplicando  o resultado, como resolver isso tbm?

 

Citar

"tipo, se colocar 2315 quando chega no 231 ele me retorna, ai coloco o 5 ele vai e acrescenta na consulta os mesmo resultado do 231 mais os mesmo de 2135."

 

Segue meu Codigo.:

$(function(){
      $('#busca').keyup(function(){
        var buscaTexto = $(this).val();
        if(buscaTexto.length >= 3){
          $.ajax({
            method: 'post',
            url: '{{ route('site.index.newBusca') }}',
            data: {_token: $('meta[name=csrf-token]').attr('content'), texto: buscaTexto},
            dataType: 'json',
            beforeSend: function() {
              $('#carregando').show();
            },
            success: function(retorno){
              if(retorno.qtd == 0){
                $('#carregando').hide();
                $('#resultado_busca').html('<p>Não encontramos resultados para sua busca</p>');
              }else{
                $.each(retorno, function(i, item) {
                  
                  $('#carregando').hide();
                  console.log(item.dados);
                  $('#resultado_busca').append(item.dados);               
                })
              }
            }
          });
        }
      });

      $('body').on('click', '#resultado_busca a', function(){
        var dadosProduto = $(this).attr('id');
        $.ajax({
          method: 'post',
          url: '{{ route('newCart.addproduto') }}',
          data: {_token: $('meta[name=csrf-token]').attr('content'), produto: dadosProduto, cnpj: '{{ $_GET['cnpj'] }}' },
          dataType: 'json',
          success: function(retorno){
            $('tbody#content_retorno').html(retorno.dados);
          }
        });
      });
    });

 

Share this post


Link to post
Share on other sites

No console fica assim:

<a href="#" id="29872">2315 MCR, UN, 05 - PRETO C/AZUL TURQUESA</a>
<a href="#" id="29873">2315 MCR, UN, 06 - PRETO COM BEGE</a>
<a href="#" id="29874">2315 MCR, UN, 07 - PRETO COM ROXO</a>
<a href="#" id="32612">2315 MCR, UN, 17 - PRETO C/VERMELHO</a>
<a href="#" id="32614">2315 MCR, UN, 19 - BORDÔ</a>
<a href="#" id="34383">2315 MCR, UN, 21 - PRETO C/ HASTES DEMI</a>
<a href="#" id="36909">2315 MCR, UN, 25 - CAFÉ C/ GOIABA</a>
<a href="#" id="38007">2315 MCR, UN, 26 - ROXO C/ CRISTAL</a>
<a href="#" id="38069">2315 MCR, UN, 27 - BORDÔ DEGRADÊ P/ VERMELHO</a>
<a href="#" id="39142">2315 MCR, UN, 28 - FRENTE BORDO C/ HASTE BEGE</a>
<a href="#" id="39161">2315 MCR, UN, 29 - CRISTAL</a>
<a href="#" id="39163">2315 MCR, UN, 30 - ROSA TRANSP. C/ PRETO TOTAL HASTE ROSA TRANSP.</a>
undefined
<a href="#" id="29872">2315 MCR, UN, 05 - PRETO C/AZUL TURQUESA</a>
<a href="#" id="29873">2315 MCR, UN, 06 - PRETO COM BEGE</a>
<a href="#" id="29874">2315 MCR, UN, 07 - PRETO COM ROXO</a>
<a href="#" id="32612">2315 MCR, UN, 17 - PRETO C/VERMELHO</a>
<a href="#" id="32614">2315 MCR, UN, 19 - BORDÔ</a>
<a href="#" id="34383">2315 MCR, UN, 21 - PRETO C/ HASTES DEMI</a>
<a href="#" id="36909">2315 MCR, UN, 25 - CAFÉ C/ GOIABA</a>
<a href="#" id="38007">2315 MCR, UN, 26 - ROXO C/ CRISTAL</a>
<a href="#" id="38069">2315 MCR, UN, 27 - BORDÔ DEGRADÊ P/ VERMELHO</a>
<a href="#" id="39142">2315 MCR, UN, 28 - FRENTE BORDO C/ HASTE BEGE</a>
<a href="#" id="39161">2315 MCR, UN, 29 - CRISTAL</a>
<a href="#" id="39163">2315 MCR, UN, 30 - ROSA TRANSP. C/ PRETO TOTAL HASTE ROSA TRANSP.</a>
undefined

Sempre que digito mais de quatro caracteres ele duplica. 

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 dmelo
      Eu tenho um script   $('.btn').click();   mas ele só funciona se eu deixar o mouse em cima do elemento.
      Como fazer pra ele funcionar ignorando a posião do mouse?
      Agradeço muito quem puder me ajudar pois já procurei em vários fóruns mas não achei a solução.
    • By mamotinho
      Olá, estou com problemas, minha data está atualizando porém eu clico em um produto ele exibe o tempo sem atualizar . quando eu mudo de produto ele mostra os dois valores exemplo
      Produto 1: tem duraçao de: 1 dia e 13:023 PM
      Produto 2: tem duraçao de: 0 dia e 23:023 PM

      Quando eu clico no produto 1 ele exibe normalmente, porém quando mudo para o produto 2 ele fica atualizando o valor do dia do produto 1 e do produto 2 sempre mudando.
      segue abaixo como está o codigo

      JavaSCRIPT
       
      function anooo(mes,dia,h,m){ var mess = mes; var dias = dia; var hss = h; var mss = m; // Set the date we're counting down to var countDownDate = new Date(""+mess+" "+dias+", 2020 "+hss+":"+mss+":00").getTime(); // Update the count down every 1 second var x = setInterval(function() { // Get today's date and time var now = new Date().getTime(); // Find the distance between now and the count down date var distance = countDownDate - now; // Time calculations for days, hours, minutes and seconds var dayss = Math.floor(distance / (1000 * 60 * 60 * 24)); var hours = Math.floor((distance % (1000 * 60 * 60 * 24)) / (1000 * 60 * 60)); var minutes = Math.floor((distance % (1000 * 60 * 60)) / (1000 * 60)); var seconds = Math.floor((distance % (1000 * 60)) / 1000); document.getElementById("days").innerHTML = dayss; document.getElementById("hrs").innerHTML = hours; document.getElementById("minus").innerHTML = minutes; document.getElementById("secs").innerHTML = seconds; this.remove(countDownDate); // If the count down is over, write some text if (distance < 0) { clearInterval(x); } }, 1000); } AQUI É O CHAMADO:
       
      <? if($result->Discount>=1){ $Month = date('M', strtotime($result->DateDiscount)); $Days = date('d', strtotime($result->DateDiscount)); $Hours = date('H', strtotime($result->DateDiscount)); $Minutes = date('i', strtotime($result->DateDiscount)); echo "<script>anooo('".$Month."','".$Days."','".$Hours."','".$Minutes."')</script>"; //echo "<script>alert('".$Month."')</script>"; ?> <ul class="time_sell remain_time"> <li> <dl> <dt class="blind">남은시간</dt> <dd> <span class='n_date day' id='days'></span> <span class='date'>일</span> <span class='n_time hour' id='hrs'></span> <span class='n_time minute' id='minus'></span> <span class='n_time second' id='secs'></span> <div id="countdown"></div> </dd> </dl> </li> </ul> <? } ?> eu já tentei de tudo mais sempre que mudo de produto ele exibe a data dos produtos anteriores em loop. a cada atualização do setInterval
    • By WagnerFilho
      Olá,
      Eu escrevi um exemplo de trabalho de um problema real que estou tentando resolver
      Criei um objeto simulando o retorno json que recebo do banco de dados.
       
      Eu preciso:
      Listar contratos e lotes de contratos Ao entrar na função, marcar o último `lote` do `contrato` como selecionado no Dropdown List Ao entrar na função, exibir as faturas `lote` e `contrato` selecionado no elemento `ul-invoices` Carregar e exibir as respectivas `faturas` ao alterar o `lote`  
      Problemas:
      Não consigo listar as `faturas` do último `lote` do `contrato selecionado` ao carregar a função. Não consigo listar as `faturas` ao `alterar` o `lote` do `contrato`  
      Observação:
      Ao entrar na página, já tenho as informações do contrato selecionado; no caso do exemplo, deixei o contrato com o ID 1. No exemplo estou usando a classe `in-attendance` para definir o contrato selecionado Estou usando `Revealing Pattern` e quero manter este padrão  
      Tradução
      contracts = contratos batches = lotes invoices = faturas  
      Exemplo
      <html> <label id="contracts"></label> <ul id="ul-invoices"></ul> <pre></pre> <script> let lblContract = document.querySelector('#contracts'); let UlInvoices = document.querySelector('#ul-invoices'); let contractInAttendance = 1; const objectContract = { id: 1, nome: 'wagner', contracts: [{ id: 1, contract: '123456', batches: [ { id: 1, contract_id: 1, batch: '1', invoices: [ { value: 10, batch_id: 1, }] }, { id: 2, contract_id: 1, batch: '2', invoices: [{ value: 10, batch_id: 2, }] }] }, { id: 2, contract: '246789', batches: [ { id: 3, contract_id: 2, batch: '1', invoices: [ { value: 20, batch_id: 3, }] }] }] } const revelling = (function() { function privateInit() { const contracts = objectContract.contracts; let contractFilteredById = contracts.filter(contract => contract.id === contractInAttendance); for (const contract of contracts) { const selectedContract = contract.id === contractFilteredById[0].id ? 'in-attendance' : ''; let htmlForBatchsOptions = contract.batches.map(batch => `<option value=${batch.id}>${batch.batch}</option>`).join(''); lblContract.innerHTML += `<div class="contract-${selectedContract}" style="display: flex;"> <div id="contract-${contract.contract}" data-contract="${contract.id}" class="loren"> <span>${contract.contract}</span> </div> <div class="ipsulum" style="margin-left: 5px;"> <select class="sel-batch"> ${htmlForBatchsOptions} </select> </div> </div>`; const batchOption = lblContract.querySelector('select.sel-batch'); batchOption.addEventListener('change', getInvoices); //batchOption.value = 2; } } function getInvoices() { const batchValue = event.target.value console.log(batchValue); //console.log(this.value); } return { init: privateInit() } })(); revelling.init; </script> </html>  
    • By mamotinho
      Olá, gostaria de sabe como posso fazer uma contagem regressiva apartir de um registro em meu banco de dados eu tentei montar um código da seguinte forma:

       
      <? $DateGET = date('m/d/Y H:i A', strtotime($result->DateDiscount)); ?> <script> var valueDate = <?=$DateGET?>; var end = new Date(valueDate); var _second = 1000; var _minute = _second * 60; var _hour = _minute * 60; var _day = _hour * 24; var timer; function showRemaining() { var now = new Date(); var distance = end - now; if (distance < 0) { clearInterval(timer); document.getElementById("countdown").innerHTML = "EXPIRED!"; return; } var days = Math.floor(distance / _day); var hours = Math.floor((distance % _day) / _hour); var minutes = Math.floor((distance % _hour) / _minute); var seconds = Math.floor((distance % _minute) / _second); document.getElementById("countdown").innerHTML = "<span class='n_date day' id='days'>" + days + "</span><span class='date'>일</span>"; document.getElementById("countdown").innerHTML += "<span class='n_time hour' id='hrs'>" + hours + "</span>"; document.getElementById("countdown").innerHTML += "<span class='n_time minute' id='minus'>" + minutes + "</span>"; document.getElementById("countdown").innerHTML += "<span class='n_time second' id='secs'>" + seconds + "</span>"; } timer = setInterval(showRemaining, 1000); </script> Mais infelizmente não passou a data registrada no banco de dados, alguém teria ideia de como posso ta fazendo.
×

Important Information

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