javascript - 使用 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);
}
}
解决方案
您可以使用 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);
}
推荐阅读
- java - 如何在android studio中使用Java将数据对象列表作为接口传递?
- docker - 端口绑定两个gitlab容器的最佳实践
- windows - hklm\Security 与 Security\Policy
- laravel - response()->download() 适用于邮递员,但不适用于 SPA
- macos - OSX Catalina / OSX Tiger - 解决任何 ISO 问题
- java - 如何将 ChromeOptions 和 chrome Driver 声明为 blockBrowserNotification_Testng 的公共方法
- javascript - jQuery Ajax - 仍在重新加载页面 - Laravel 分页
- firebase - 从 Firestore 获取数据并渲染到另一个函数 DART
- git - Git:误导性错误:“找不到远程存储库”,而我没有写访问权限
- python - Python-Jupyter 中的键盘快捷键不起作用