Run php and javascript at the same time

Asked

Viewed 195 times

1

Good evening guys, I needed to run PHP and javascript "at the same time", I need to update a graphic done in javascript without stopping running PHP, I simplified the problem in the code below, if I can run the code below, I can achieve the goal. If anyone knows how to accomplish this goal otherwise please help me !

<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>

If While (true) is removed and "looping is" reaches $i = 5, the graph is shown, "BUT", if While (true) is maintained, then the graph will never be shown !

Thank you for your patience !

  • 2

    You can use ajax. You cannot run at the same time, because js is client-side and php server-side, but you can make js call a php via ajax.

1 answer

1

Make a request Ajax for the file '*. php' through Javascript. To requisicionar there are 2 native objects: XMLHttpRequest and ActiveXObject.

The ActiveXObject is supported by IE <= 6.

Example of how to make a Ajax:

var php = window.XMLHttpRequest ?
    new XMLHttpRequest() : // Suporta o XMLHttpRequest
    new ActiveXObject("Microsoft.XMLHTTP"); // Supporta o ActiveXObject

// Note que não é preciso escolher o tipo de resposta se você
// só quer texto
php.responseType = "text"; // Define resposta como texto
php.open("GET", "SEU_ARQUIVO", true);
// O primeiro argumento nessa chamada é o método de requisição;
// O segundo argumento é o link do arquivo '*.php';
// O último argumento define se a requisição é assíncrona;
// Ele tem que ser assíncrono agora, já que síncrono é deprecated, atualmente.
// Defina 'onreadystatechange' em requisições assíncronas e
// defina 'onload' em requisições síncronas.

// 'onreadystatechange' ocorre toda vez que o objeto da requisição
// muda de estado.
php.onreadystatechange = function() {
    // readyState --> se é 4, a requisição terminou.
    // 'this' refere ao objeto 'php'
    if(this.readyState === 4) {
        // status --> se é 200, a requisição foi feita com sucesso.
        if(this.status === 200) {
            alert(php.response); // 'response' é a resposta;
            // Nesse caso seria um retorno do PHP se ele chamar um
            // 'echo' ou 'printf'.
            // Aqui ficaria o bloco de sucesso.
        }else{
            // Aqui ficaria o bloco de algum erro.
            // Pode ser >= 500, 404, etc.
        }
    }
}
php.send(); // Inicia a requisição.

... And if you want to request the file '*. php' with variables GET in the URL (".php file?a=0&b=1") with complex content and different characters or that includes HTML, you should use the native function of encodeURIComponent for each value and return in the request link.

Example:

php.open("GET", "wow.php?a=" + encodeURIComponent("<w>!!!</w>& ###"), true);

Browser other questions tagged

You are not signed in. Login or sign up in order to post.