使用JavaScript获取和PHP动态返回

使用JavaScript获取和PHP动态返回,javascript,Javascript,我有一个每秒钟打印一条消息的PHP代码。我想每秒钟通过JavaScript打印一次这份报告。JavaScript代码发送了一个请求,请求我处理PHP代码,下面我列出了我的JavaScript代码,如果有请帮助我,我将不胜感激,谢谢大家的关注 async function enviarPushAppAss() { enviarPushAppAssociado.innerHTML = 'Enviando...'; // let form = document

我有一个每秒钟打印一条消息的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));
}
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);
      }  
}

您可以使用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);
}

在服务器脚本退出之前,fetch不会返回。您的问题不是很清楚。你想每秒对PHP文件进行一次获取调用,并在enviarPushAppAssociado中打印响应吗?我想获取PHP返回并在dos.innerHTML中打印响应,但根据Barma的回答,这是不可能的,有什么方法可以满足我的需要吗?PHP脚本应该在每次调用时只返回一个结果。您可以使用setInterval定期执行获取。或者您可以研究使用WebSocket。问题是我无法继续重新发送请求,因为mysql返回55000条记录。我相信您不可能在一秒钟内获得55000条记录。完成后再发送一个请求。我得到mysql示例中的记录55000条,然后我做了一个foreach并打印了这些结果,这些结果我想得到,我得到了你的想法。那么这可能会有所帮助。