使用JavaScript获取和PHP动态返回
我有一个每秒钟打印一条消息的PHP代码。我想每秒钟通过JavaScript打印一次这份报告。JavaScript代码发送了一个请求,请求我处理PHP代码,下面我列出了我的JavaScript代码,如果有请帮助我,我将不胜感激,谢谢大家的关注使用JavaScript获取和PHP动态返回,javascript,Javascript,我有一个每秒钟打印一条消息的PHP代码。我想每秒钟通过JavaScript打印一次这份报告。JavaScript代码发送了一个请求,请求我处理PHP代码,下面我列出了我的JavaScript代码,如果有请帮助我,我将不胜感激,谢谢大家的关注 async function enviarPushAppAss() { enviarPushAppAssociado.innerHTML = 'Enviando...'; // let form = document
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并打印了这些结果,这些结果我想得到,我得到了你的想法。那么这可能会有所帮助。