如何实现向file.php发送GET请求定时重发,按yes/no响应执行对应函数
需求实现方案
以下提供两种主流场景的可运行实现:
1. 浏览器端原生JavaScript实现
核心逻辑用fetch发请求,结合递归+定时器实现重试机制:
// 定义对应处理函数 function handleYes() { // 收到yes后的逻辑写在这里 console.log('执行yes对应逻辑'); } function handleNo() { // 收到no后的逻辑写在这里 console.log('执行no对应逻辑'); } // 核心请求重试函数 function sendRequest() { // 拼接GET请求参数 const params = new URLSearchParams({ username: 'alison', date: '2021' }); // 发送GET请求 fetch(`file.php?${params}`) .then(res => res.text()) // 读取响应文本内容 .then(resText => { // 去前后空格避免响应带换行/空白符导致判断失败 const trimRes = resText.trim(); // 判断是否为合法响应 if (trimRes === 'yes') { handleYes(); } else if (trimRes === 'no') { handleNo(); } else { // 非法响应,200ms后重试 setTimeout(sendRequest, 200); } }) .catch(err => { // 请求出错(网络错误/接口报错等),200ms后重试 setTimeout(sendRequest, 200); }) } // 首次调用启动请求 sendRequest();
- 可选优化:可新增全局变量统计重试次数,超过阈值后终止重试避免资源浪费。
2. Node.js 环境实现(基于axios库)
如果是服务端Node.js场景,实现逻辑如下:
const axios = require('axios'); // 定义处理函数 function handleYes() { console.log('执行yes对应逻辑'); } function handleNo() { console.log('执行no对应逻辑'); } async function sendRequest() { try { const res = await axios.get('file.php', { params: { username: 'alison', date: '2021' }, responseType: 'text' }); const trimRes = res.data.trim(); if (trimRes === 'yes') { handleYes(); } else if (trimRes === 'no') { handleNo(); } else { setTimeout(sendRequest, 200); } } catch (err) { // 请求异常时重试 setTimeout(sendRequest, 200); } } // 启动请求 sendRequest();
内容的提问来源于stack exchange,提问作者AlisonVV
相关产品推荐
相关产品推荐

