Jump to content
mamotinho

problema ao passar mais de um resultado pelo json_enconde()

Recommended Posts

oi pessoal estou com um problema , não estou conseguindo passar todos os valores o foreach no json_encode() alguém poderia me ajudar, eu estou tentando monta um mecanismo de refresh em tempo real de uma lista de notificação veja abaixo:
 

<script type="text/javascript">
 function make_call()
{
 

               // Fazendo requisição AJAX
            $j.post('teste.php', function (frase) {

                // Exibindo frase
                $j('#listas').html('<i>' + frase + '</i>');

            }, 'JSON');


  setTimeout(function(){ 
    make_call();
  }, 5000);
}

</script>


Aqui é o arquivo que quero enviar para a div #lists
 



<?php
require("conexao/directory.php");

	        
	   
	           $notificar = $db->query("select TOP 5 * from Techi7CP.dbo.cabal_notificacao_geral order by regdate desc");
		       $notificacao = $notificar->fetchAll();
		       $count_notificacao = abs($notificar->rowCount());
		    if($count_notificacao==0){
			echo '<li style="text-align:center;">não existe notificações no momento.</li>';	
			}else{
		
		       foreach($notificacao as $notif){
				   
				   $consulta_conta = $db->query("select * from account.dbo.cabal_auth_table where UserNum='".$notif['usernum']."'")->fetchObject();
	   
				   
				    switch($notif['acao']){
						case 'logadopremiado' : echo ' <li><a class="black-text" href="#!"><span class="material-icons icon-bg-circle red small">redeem</span>'.$notif['jogador'].' ganhou no Logado Premiado</a>
                <time class="media-meta grey-text darken-2" datetime="2015-06-12T20:50:48+08:00">
				  '.Data::ExibirTempoDecorrido(date("Y-m-d H:i:s.B", strtotime($notif['regdate']))).'</time>
              </li>'; break;
							
							case 'mudarsenha' : echo ' <li><a class="black-text" href="#!"><span class="material-icons icon-bg-circle teal small">vpn_key</span>'.$consulta_conta->Nome.' alterou sua senha</a>
                <time class="media-meta grey-text darken-2" datetime="2015-06-12T20:50:48+08:00">
				  '.Data::ExibirTempoDecorrido(date("Y-m-d H:i:s.B", strtotime($notif['regdate']))).'</time>
              </li>'; break;
							
							case 'distribuirpontos' : echo ' <li><a class="black-text" href="#!"><span class="material-icons icon-bg-circle cyan small">control_point</span>'.$notif['jogador'].' distribuiu seus pontos</a>
                <time class="media-meta grey-text darken-2" datetime="2015-06-12T20:50:48+08:00">
				  '.Data::ExibirTempoDecorrido(date("Y-m-d H:i:s.B", strtotime($notif['regdate']))).'</time>
              </li>'; break;
							
							case 'girodasorte' : echo ' <li><a class="black-text" href="#!"><span class="material-icons icon-bg-circle brown small">star_border</span>'.$consulta_conta->Nome.' usou o giro da sorte</a>
                <time class="media-meta grey-text darken-2" datetime="2015-06-12T20:50:48+08:00">
				  '.Data::ExibirTempoDecorrido(date("Y-m-d H:i:s.B", strtotime($notif['regdate']))).'</time>
              </li>'; break;
							
							case 'sistematpoint' : echo ' <li><a class="black-text" href="#!"><span class="material-icons icon-bg-circle green small">golf_course</span>'.$notif['jogador'].' recebeu seu tpoint por clique</a>
                <time class="media-meta grey-text darken-2" datetime="2015-06-12T20:50:48+08:00">
				  '.Data::ExibirTempoDecorrido(date("Y-m-d H:i:s.B", strtotime($notif['regdate']))).'</time>
              </li>'; break;
							
							case 'combo' : echo ' <li><a class="black-text" href="#!"><span class="material-icons icon-bg-circle amber small">videogame_asset</span>'.$notif['jogador'].' fez '.$notif['ExtraDetalhes'].' em sua primeira vez</a>
                <time class="media-meta grey-text darken-2" datetime="2015-06-12T20:50:48+08:00">
				  '.Data::ExibirTempoDecorrido(date("Y-m-d H:i:s.B", strtotime($notif['regdate']))).'</time>
              </li>'; break;
							
					}
			   }
			}
	   ?>

como eu faria para ser exibido todos os resultados registrados com o json_encode().

Share this post


Link to post
Share on other sites

Se vai trabalhar com Javascript/Ajax, não há necessidade de enviar tags de html na requisição, até seria válido decada atrás, hoje não faz mais sentido.

 

Retorne somente os objetos e manipule a DOM


$array = [
    "acao" => $notif['acao'],
    "regdate" => $notif['regdate'],
    "jogador" => $notif['jogador'],
    "ExtraDetalhes" => $notif['ExtraDetalhes'],
];

return json_encode($array);

Prefira utilizar funções do Javascript es6 em diante nativas ao invés da  lib JQuery.

Por exemplo, isto aqui

$j.post('teste.php', function (frase) {

você poderia usar fetch Api para as requisições "Também existe https://github.com/axios/axios"

e querySelector para selecionar o elemento

innerHTML manipular o DOM

Share this post


Link to post
Share on other sites

Só completando o que o @Williams Duarte disse, sobre o erro de usar jQuery também você tem uma função sendo requisitada a cada 5 segundos e lançando uma query em seu SQL a cada sincronização.

Isso não é o ideal imagina 10 páginas abertas por 1000 usuários. São mais de 100.000 carregamentos e requisições por minuto o suficiente para sufocar seu servidor.

Prefira deixar esse recurso sendo manuseado por WebSocket por exemplo

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 marceloDiegues
      Olá, amigos.
      Por favor,  me ajude com a seguintes perguntas.
       
      Qual a complexidade de um projeto desse?
      Qual o preçp de um projeto desse tipo?
       
      Quero contratar algum profissional para criar um site que tenha as seguintes funcionabilidades:
       
      1- Cadastro de usuário;
      2- Login e senha;
      3- O site seria muito parecido com o www.qconcursos.com, o usuário resolveria questões online.
      Contudo, haveria a possibilidade de criar salas tipo aqueles bate-papo da &nbsp;UOL.
      Então, o usuário criaria salas de estudos, em que , resolveria questões e conseguiria se comunicar por chat com usuários que estejam na mesma sala.
       
      Exemplo em anexo:
       
       
       
       

    • By rvamecca
      Eu tenho um servidor que roda os PHP da versão 5.6 até a 8.0 com vários sites. Utilizo a versão FPM só que pesquisei na internet inteira e não consegui fazer rodar os arquivos customizados php.ini/.user.ini nos diretórios dos domínios. Chequei via phpinfo() e não carrega o arquivo customizado de configuração.
       
      Alguém pode me dar um help?
       
      Servidor Ubuntu 18.04 com Apache e as versões PHP 5.6, 7.0, 7.2, 7.4, 8.0 em FPM
    • By violin101
      Caros amigos, saudações...
       
      Fiz várias pesquisa, mas não consegui entender como devo fazer corretamente.
       
      Tenho um Cadastro de Produto/Clientes/etc.
       
      Gostaria de após clicar no Button ADICIONAR ou GRAVAR, quero mostrar na tela a seguinte mensagem:
      msg:
      Aguarde Processando...
       
      obs.: em alguns sistema até parece uma MODAL, com barra de progresso.
       
      Para impedir que o usuário fica Clicando nos Buttons.
       
      Alguém poderia me auxiliar de como devo fazer isso ?
       
      Grato,
       
      Cesar
    • By alysson122010
      Galera estou começando a trabalhar com datatables porem tenho uma dificuldade pq tipo até 200 registros por pagina é aceitavel mas penso quando tiver 2000 registro carregar tudo numa pagina so da errado pq é muitos dados e pode travar tudo.
      Como posso fazer para listar com limite por pagina ou alguma maneira para poder colocar varios dados sem travar.
       
      estou usando assim:
      <script type="text/javascript">        $(document).ready(function() {             $('#example').DataTable({         "order": [[ 0, "desc" ]],         "language": {             "url": "//cdn.datatables.net/plug-ins/1.10.21/i18n/Portuguese-Brasil.json"         }     });         } );        </script> <table id="example" class="table table-striped table-bordered" style="width:100%">         <thead>             <tr>                 <th>Name</th>                 <th>Position</th>                 <th>Office</th>                 <th>Age</th>                 <th>Start date</th>                 <th>Salary</th>             </tr>         </thead>         <tbody>             <tr>                 <td>Tiger Nixon</td>                 <td>System Architect</td>                 <td>Edinburgh</td>                 <td>61</td>                 <td>2011/04/25</td>                 <td>$320,800</td>             </tr>             <tr>                 <td>Garrett Winters</td>                 <td>Accountant</td>                 <td>Tokyo</td>                 <td>63</td>                 <td>2011/07/25</td>                 <td>$170,750</td>             </tr>             <tr>                 <td>Ashton Cox</td>                 <td>Junior Technical Author</td>                 <td>San Francisco</td>                 <td>66</td>                 <td>2009/01/12</td>                 <td>$86,000</td>             </tr>             <tr>                 <td>Cedric Kelly</td>                 <td>Senior Javascript Developer</td>                 <td>Edinburgh</td>                 <td>22</td>                 <td>2012/03/29</td>                 <td>$433,060</td>             </tr>             <tr>                 <td>Airi Satou</td>                 <td>Accountant</td>                 <td>Tokyo</td>                 <td>33</td>                 <td>2008/11/28</td>                 <td>$162,700</td>             </tr>             <tr>                 <td>Brielle Williamson</td>                 <td>Integration Specialist</td>                 <td>New York</td>                 <td>61</td>                 <td>2012/12/02</td>                 <td>$372,000</td>             </tr>             <tr>                 <td>Herrod Chandler</td>                 <td>Sales Assistant</td>                 <td>San Francisco</td>                 <td>59</td>                 <td>2012/08/06</td>                 <td>$137,500</td>             </tr>             <tr>                 <td>Rhona Davidson</td>                 <td>Integration Specialist</td>                 <td>Tokyo</td>                 <td>55</td>                 <td>2010/10/14</td>                 <td>$327,900</td>             </tr>             <tr>                 <td>Colleen Hurst</td>                 <td>Javascript Developer</td>                 <td>San Francisco</td>                 <td>39</td>                 <td>2009/09/15</td>                 <td>$205,500</td>             </tr>         </tbody>         <tfoot>             <tr>                 <th>Name</th>                 <th>Position</th>                 <th>Office</th>                 <th>Age</th>                 <th>Start date</th>                 <th>Salary</th>             </tr>         </tfoot>     </table> <script type="text/javascript" language="javascript" src="https://cdn.datatables.net/1.10.22/js/jquery.dataTables.min.js"></script> <script type="text/javascript" language="javascript" src="https://cdn.datatables.net/1.10.22/js/dataTables.bootstrap4.min.js"></script>  
    • By AlexandrePrezzi
      Seguinte
      Tenho uma página chamada  "teste.php" nessa página tem um formulário com vários campos que o usuário usa para fazer um filtro dos campos a serem pesquisado...
       
      Ao clicar no Pesquisar (submit) ... o action da página faz a seguinte ação
       
      script type="text/javascript"> $(function($){ $('#meuFormulario').submit(function(){ var dados = jQuery(this).serialize(); jQuery.ajax({ type: "POST", url: "src/controller/request_teste.php", data: dados, cache: false, beforeSend: function() { $('#resultPesq').html("Carregando..."); }, success: function(e) { //window.alert(e); $('#resultPesq').html(e); }, error: function() { $('#resultPesq').html('Não foi encontrado dados!'); } }); return false; }); }); </script> O arquivo "request_teste.php", é quem recebe os dados do POST e faz o  tratamento desses dados....
       
      Ao final desse arquivo tem um  require_once 'result_teste.php' que vem a ser o arquivo onde irá mostrar o resultado da pesquisa.
       
      Nesse arquivo eu fiz uma páginação ao final do resultado.
       
      Entao primeiramente o link que estou acessando é 
       
      principal.php?link=teste.php  (abre a pagina com o formulário)
      ao clicar em pesquisar o link nao muda
       
      quando clico em página 2, é feito um refresh e a url fica principal.php?link=teste.php&pag=2
       
      O que acontece é que como a página faz um refresh eu perco todos dados do meu POST e tambem preciso clicar no botão pesquisar pra carregar os dado da página 2.
       
      Alguem sabe como ajustar isso ?

      Se precisarem de mais informações me avisem
       
       
       
×

Important Information

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