0

I have a PHP code that prints a message every second. I would like to take this return and print it via JavaScript every second. The JavaScript code sends a request for my PHP code to process, below I list my JavaScript code, if any please help me I will be grateful, I thank you all for your attention

async function enviarPushAppAss() {
        enviarPushAppAssociado.innerHTML = 'Enviando...';
    
        // let form = document.querySelector('#frmSendPushAppAss');
        let data = new FormData();
    
        let titulo = document.querySelectorAll('#titulo')[0].value;
        let desc = document.querySelectorAll('#descricao')[0].value;
        let uf = document.querySelectorAll('#uf')[0].value;
        let sexo = document.querySelectorAll('#sexo')[0].value;
        let img = document.querySelectorAll('#imagem')[0].files[0];
        let men = document.querySelectorAll('#mensagem')[0].value;
        let dos = document.querySelectorAll('.dosContent')[0];
    
        data.append('titulo', titulo);
        data.append('descricao', desc);
        data.append('uf', uf);
        data.append('sexo', sexo);
        data.append('imagem', img);
        data.append('mensagem', men);
    
        let requestOptions = {
            method: 'POST',
            headers: myHeadersFormData,
            body: data,
            redirect: 'follow',
        };
    
        await fetch(BASE_URL + 'enviarPush/', requestOptions)
            .then((response) => response.text())
            .then((result) => {
                console.log(result)
            })
            .catch((error) => console.log('error', error));
}

Meu PHP

public function enviarPush() {
$titulo     = $_POST['titulo'];
      $descricao  = $_POST['descricao'];
      $uf         = $_POST['uf'];
      $sexo       = $_POST['sexo'];
      $mensagem   = $_POST['mensagem'];

      try {

        $conn = new ConexaoMysql('app');
        $associados = $conn->dbCon()->prepare(" SELECT 
                                          a.idAssociado, 
                                          a.nome, 
                                          a.tokenPush 
                                        FROM 
                                          associado a
                                        WHERE 
                                            a.tokenPush <> ''
                                        AND a.estado IN ($uf)
                                        AND a.sexo IN ($sexo)
                                        AND a.idAssociado NOT IN (  SELECT 
                                                                      anp.idAssociado 
                                                                    FROM 
                                                                      appNotificationPush AS anp
                                                                    WHERE 
                                                                      anp.titulo = '$titulo'
                                                                  )
                                        ORDER BY 
                                          nome ASC");
          if( $associados->execute() ) {
            $associados = $associados->fetchAll(PDO::FETCH_CLASS);

            echo 'Total de registros para envio: ' . count($associados) . ".\n";
            foreach ($associados as $key => $value) {
              echo $value->nome;
              ob_flush();
              flush();
              sleep(1);
            }
          }
      } catch (PDOException $e) {
        die($e);
      }  
}

1 Answers1

0

You could use setTimeout and recursion. It will call itself after it got the response from your server.

async function enviarPushAppAss() {
        enviarPushAppAssociado.innerHTML = 'Enviando...';
    
        // let form = document.querySelector('#frmSendPushAppAss');
        let data = new FormData();
    
        let titulo = document.querySelectorAll('#titulo')[0].value;
        let desc = document.querySelectorAll('#descricao')[0].value;
        let uf = document.querySelectorAll('#uf')[0].value;
        let sexo = document.querySelectorAll('#sexo')[0].value;
        let img = document.querySelectorAll('#imagem')[0].files[0];
        let men = document.querySelectorAll('#mensagem')[0].value;
        let dos = document.querySelectorAll('.dosContent')[0];
    
        data.append('titulo', titulo);
        data.append('descricao', desc);
        data.append('uf', uf);
        data.append('sexo', sexo);
        data.append('imagem', img);
        data.append('mensagem', men);
    
        let requestOptions = {
            method: 'POST',
            headers: myHeadersFormData,
            body: data,
            redirect: 'follow',
        };
    
        enviarPush(requestOptions);
}


async function enviarPush(requestOptions)
{
    setTimeout(() => {
        await fetch(BASE_URL + 'enviarPush/', requestOptions)
            .then((response) => response.text())
            .then((result) => {
                console.log(result);
                enviarPush();
            })
            .catch((error) => console.log('error', error));
    }, 1000);
}
Ryan Le
  • 71
  • 1
  • 6