首页 > 解决方案 > 使用 JavaScript fetch 和 PHP 动态返回

问题描述

我有一个每秒打印一条消息的 PHP 代码。我想每秒通过 JavaScript 获取这个回报并打印出来。JavaScript 代码发送请求我的 PHP 代码处理,下面列出我的 JavaScript 代码,如果有请帮助我,我将不胜感激,谢谢大家的关注

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));
}

我的 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);
      }  
}

标签: javascript

解决方案


您可以使用 setTimeout 和递归。它会在收到服务器的响应后调用自己。

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);
}

推荐阅读