Jump to content
Plástico Bolha

Rodar php e javascript ao mesmo tempo

Recommended Posts

Boa noite pessoal, precisava rodar PHP e javascript "ao mesmo tempo", preciso atualizar um gráfico feito em javascript sem parar de rodar o PHP em momento algum, simplifiquei o problema no código abaixo, se conseguir fazer o código abaixo rodar, eu consigo atingir o objetivo. Caso alguém saiba como realizar esse objetivo de outra maneira por favor me de um help !

<html>
  <head>
    <script type="text/javascript" src="https://www.gstatic.com/charts/loader.js"></script>
    <script type="text/javascript">google.charts.load('current', {'packages':['corechart']}); </script>
  </head>
<?php 
@ini_set("output_buffering", "Off");
@ini_set('implicit_flush', 1);
@ini_set('zlib.output_compression', 0);
@ini_set('max_execution_time',0);
header( 'Content-type: text/html; charset=utf-8' );
echo "Contador: ";
$i = 0;
while (true)  { // Enquanto esse looping não terminar nunca vou exibir o gráfico
                // depois que i = 5, o gráfico é mostrado, e esse é o problema, rodo uma coisa depois outra, e não as 2 ao mesmo tempo
    for (; $i < 5; $i++) {
        echo $i." -- ";
        if(sleep(1) != 0){
            echo "sleep failed script terminating"; 
            break;
        }
        flush();
        ob_flush();
    }
    
    printf('
    <script type="text/javascript"> 
    i = '.$i.'    
    alert(i) // Engraçado que isso funciona ! quando i = 5 o alert é mostrado, mas o gráfico não é exibido !
    var dashboardState = "";
    options = ""
    function updateDraw() {
        chart = new google.visualization.PieChart(document.getElementById("piechart"));
        data = google.visualization.arrayToDataTable(dashboardState);
        chart.draw(data, options);
    }                        
    VariavelPHP = "LoL =D"
    options = {title: "Teste"};
    dashboardState = eval("[[\'asd\', \'qwe\'],[\'VariavelPHP\', i],[\'Task2\', 25],[\'Task3\',  10],]");
    google.charts.setOnLoadCallback(updateDraw);
    </script>
    ');
    $i = 0;
}
?>
<body>
    <div id="piechart" style="width: 900px; height: 500px;"></div>
</body>
</html>

Se o While (true) for retirado e o "looping for" chegar em $i = 5, o gráfico é mostrado, "MAS", se o While (true) for mantido, então o gráfico nunca será mostrado !

Agradeço a paciência !

Share this post


Link to post
Share on other sites

PHP e JS não vão rodar "ao mesmo tempo". PHP roda no servidor. JS roda no cliente (navegador). O servidor executa o PHP e envia a saída ao navegador, que interpreta o código e o renderiza.

 

Não entendi direito seu objetivo. Imagino que queira atualizar o gráfico conforme novos dados sejam enviados. O GCharts manipula eventos, permitindo interação. Dê uma olhada aqui: https://developers.google.com/chart/interactive/docs/basic_interactivity

Share this post


Link to post
Share on other sites

Você tem que ter um objetivo para por no while. While = Loop. Ou usa o while ou o for.

Share this post


Link to post
Share on other sites

Na verdade faço mineração de dados no Twitter, depois que eu abro conexão com o Twitter, eu poderia entrar em um looping durante horas pegando Tweets, eu não quero ficar interrompendo a conexão para atualizar o gráfico, eu poderia usar ajax, mas ai teria que parar a conexão (Stream), e reabrir ela depois de atualizar o gráfico =X com os Tweets, ou eu poderia deixar o usuário entediado ao ter que esperar cerca de 10 minutos para ver o gráfico atualizado ... Se eu ficar abrindo e fechando conexão toda hora eu sou penalizado pelo Twitter, e quando sou penalizado tenho que esperar por volta de 3 minutos para reabrir a conexão.

Share this post


Link to post
Share on other sites

Você pode usar a ideia do Long Polling, que mantém o loop no servidor e envia notificações ao cliente. Essa "notificação" serão dados a mais para atualizar o gráfico.

 

WebSockets são outra alternativa também

Beraldo você tem alguma publicação no seu blog, um totorial sobre websocket? Valeu abraço.

Share this post


Link to post
Share on other sites

Você pode usar a ideia do Long Polling, que mantém o loop no servidor e envia notificações ao cliente. Essa "notificação" serão dados a mais para atualizar o gráfico.

 

WebSockets são outra alternativa também

Vou tentar aplicar isso, é "exatamente" o que eu procurava! Caso de certo eu volto para comentar ! Dando certo ou errado, agradeço muito a paciência =) ... Ao menos segui o seu tutorial e rodou normalmente ! Vou adaptar para o meu objetivo.

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 k9studio
      Olá Amigos,
      tenho essa tabela abaixo e estou apanhando para listar os dados e fazer validação,
      alguém pode ajudar como chamar os dados e validar mostrar o nome somente se estiver visible=on  

       
      CREATE TABLE `system` (   `namesystem` text COLLATE utf8_unicode_ci NOT NULL,   `setting` text COLLATE utf8_unicode_ci NOT NULL,   `value` text COLLATE utf8_unicode_ci NOT NULL,   `order` int(1) NOT NULL,   KEY `namesystem_setting` (`namesystem`(32),`setting`(32)),   KEY `setting_value` (`setting`(32),`value`(32)) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; como os dados estão na tabela:
       
      namesystem setting   value   order (honda)    (name)   (Honda)   1 (honda)    (xtts)   (ok)      0    (honda)   (visible)  (on)      0    (toyota)    (name)   (Toyota)  2 (toyota)    (xtts)   (ok)      0    (toyota)  (visible)  (on)      0    
    • By iguulima
      É possivel realizar uma consulta SQL em duas colunas da mesma tabela usando outra função que não seja o AND ou OR? Segue o meu Select ate agora:
       
      (SELECT * FROM product WHERE comid = $idcom AND status = 'Ativo' AND categ = $category AND nameprod like'%$search%'  ORDER BY id DESC)  
      Por exemplo se eu colocar um AND após buscar o nameprod, no nome do produto não tiver a palavra chave ele também não irá buscar. Ou se colocar um OR ele anulo as outras condições até onde eu sei.
      Iniciante em programação.
    • By daviassumpcao
      Pessoal... há valores em um JSON sendo exibidos por um JS (imagem anexo)... preciso verificar se um valor "x" está em um determinado nó do JSON. E a partir daí exibir uma div.... marquei na imagem com um círculo rosa qual valor quero verificar porém meu script não funciona... material de estudo. É possível fazer isso acontecer?
       
      JS
      const jsonCat = vtxctx.categoryId; const catProd = JSON.parse(jsonCat); var divProd = document.getElementById('faq-connect'); if (catProd.categoryId == 10103) { divProd.style.display = 'block'; } else{ divProd.style.display = 'none'; } HTML para exibir uma DIV em caso positivo
      <div class="faq-connect" style="display:none"> <p>Sucesso!</p> </div>  
       

    • By paulinhosupriano
      Bom dia a todos!
       
      Gente, tenho uma dúvida!
       
      Muitos desenvolvedores utilizam o framework nodejs com express para trabalhar com API e também estão utilizando o ADONISJS.
      Minha duvida seria, em alguns projetos devemos criar configurações onde o usuário cliente não poderá ter acesso a visualização dos dados public de constantes de configuração, url ou banco. 
      Como protejo essas informações?
      Muitas dizem que seria o arquivo .env. 
       
      Como protegerei essas informações? 
      Exemplo firabase como proteger os dados token etc.
       
      Poderiam informar tutorial, curso, vídeo algo a respeito do assunto? 
       
      Agradecido!
       
    • By violin101
      Caros amigos, saudações...
       
      Estou com uma dúvida de dados vindo do MySql, para preencher Tabela via AJAX.
       
      Como faço para formatar o CAMPO no formato MOEDA, ou seja:
      o campo vem.: 12.00
      formatar para: 12,00
       
      o código está assim:
      function montaTable(cep){ $.ajax({ url: "<?php echo base_url();?>site/produtos/getByCep", type: "POST", dataType:"json", data:{ cep: cep}, success:function(data){ //Remove Mensagem da Tabela $("#tborden tbody tr.message").remove(); var cols = ""; for (var i = 0; i < data.length; i++) { cols += "<tr>"; cols += "<td>" + data[i].cepRegiao + "</td>"; cols += "<td>" + data[i].frtEntreg + "</td>"; cols += "<td>" + data[i].vlrFrete + "</td>"; //<--como formatar esse campo cols += "</tr>"; } //Atualiza a Tabela $("#tborden tbody").empty(); //Adiciona os Itens a Tabela $("#tborden tbody").append(cols); } });//Fim - ajax Valor Frete }

      Grato,
       
      Cesar
×

Important Information

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