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 quimera
      O problema seria simples se o script da página permitisse o autopreenchimento usando javascript, masssssssssssss...
      O site em questão não permite que o campo seja preenchido dinamicamente ou seja usando script (ele identifica a digitação do teclado para impedir isso)
      Eles devem usar algo como: onkeypress ou onkeyup e acumular os valores digitados numa variável para dispor isso no post/get
      Por que nesse caso, se foi simplesmente colado ou preenchido via script não vai aceitar já que provavelmente é acumulativo e não verificado se o campo foi preenchido.
      Então como preencher dinamicamente o campo usando javascript nesse caso?
    • By AndersonWS
      Boa tarde, já tentei muitas formas mas não consigo retirar o atributo required.
      O resultado que eu preciso é, quando retiro o required de um (name="posicao") o outro fica com required e vice-versa e também um aparece e outro some.
       
      Segue o código HTML.
      <select name="posicao" class="form-control option_escolhida" style="display:none" id="2" required="" disabled> <option value="" selected>Selecione</option> <option value="1">Espaco</option> <option value="2">Cursos</option> </select> <select name="posicao" class="form-control option_escolhida" style="display:none" id="4" required="" disabled> <option value="" selected>Selecione</option> <option value="4">Políticas de privacidade</option> </select> <div class="sem_option"><code>Sem posição definida</code></div> <div class="ini_option"><code>Posição inicial</code></div> <div class="main_option" style="display:none"> <input name="apelido" class="form-control apelido" placeholder="Nome do grupo" type="text" required="" disabled> </div> Segue o código javascrpt:
      $('.select_escolhida').on({change: listChildren}).trigger('change'); function listChildren() { if ( $(this).val() != '' ) { children = $('option').val(); $(".ini_option").show(); $(".option_escolhida").hide(); $(".option_escolhida").attr("disabled", true); $("#" + $(this).val() ).show(); $("#" + $(this).val() ).removeAttr("disabled"); $(".sem_option").hide(); if( ($(this).val() == '1')||($(this).val() == '3') ){ $(".main_option").show(); $(".apelido").removeAttr("disabled"); } else { $(".main_option").hide(); $(".apelido").attr("disabled", true); $(".ini_option").hide(); } } else { $(".sem_option").show(); $(".ini_option").hide(); $(".apelido").hide(); } }  
    • By gersonab
      Bom dia, tenho 2 tabelas editáveis em uma div, estas funcionam normalmente, o problema é que o loop não acontece , só carrega sobre 1 item, sendo que este eu posso ter mais itens.
       na página principal tenho:
      <div class="carregadados"></div> function fetch_data() { $.ajax({ url:"../lista/finan.php", method:"POST", success:function(data){ $('.carregadados').html(data); } }); } fetch_data(); a página a ser carregada esta assim:
      <?php session_start(); require_once('config.php'); $output = ''; $idc1=$_SESSION['idc']; $sql01 = "SELECT * FROM porcent WHERE idfcli='$idc1'"; $result = mysqli_query($con, $sql01); while($user41 = mysqli_fetch_array($result)){ // primeiro while onde seleciono os itens da pessoa podendo ter vários $output .= ' <div class="table-responsive mb-4 mt-4"> Aqui vem os dados da pessoa '; $id1= $user41["idproc"]; $sqladv = "SELECT * FROM poradv WHERE procav='$id1'"; $resulta = mysqli_query($con, $sqladv); $output .= ' <table class="table table-bordered table-hover table-striped" style="width:100%"> <thead> <tr> </tr> </thead> <tbody>'; if(mysqli_num_rows($resulta) > 0) { while($usera = mysqli_fetch_array($resulta)){ //segundo while onde tenho os dados de venda em uma tabela editavel $output .= ' <tr> </tr>'; } $output .= ' <tr> // insiro linhas caso precise </tr> '; } else { $output .= '<tr> // caso não tenha nada inserido, posso fazer por aqui </tr> '; } $output .= '</tbody> </table>'; $id2= $user41["idproc"]; $sql = "SELECT * FROM parcelas WHERE procid='$id2' ORDER BY datapar, idpar ASC"; $result = mysqli_query($con, $sql); $output .= ' <table class="table table-bordered table-hover table-striped" style="width:100%"> <thead> <tr> // tabela de pagamentos editavel </tr> </thead> <tbody>'; if(mysqli_num_rows($result) > 0) { while($row = mysqli_fetch_array($result)) { //terceiro while , tabela referente a pagamentos $output .= ' <tr> // tabela pagamentos </tr>'; } $output .= ' <tr> // insiro linhas caso precise </tr> '; } else { $output .= '<tr> // caso não tenha nada inserido, posso fazer por aqui </tr> '; } $output .= '</tbody> </table> </div> '; } echo $output; ?> só esta carregando uma vez , tudo dentro da parte editável esta funcionando, porém no primeiro while só faz 1 loop, os demais estão funcionando perfeitamente.
      desde já agradeço qualquer ajuda.
    • 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
×

Important Information

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