应结合 navigator.online、fetch 超时控制与心跳探测实现弱网检测:先用 online 判断基础联网状态并监听事件,再用 fetch 设置超时及分类捕获 typeerror 等错误,关键业务辅以短超时心跳请求验证连通性,最后按场景提供可操作的友好提示与离线缓存同步。

在弱网环境下,Ajax 请求容易超时、失败或响应缓慢,单纯靠请求失败回调(如 error 或 catch)无法区分是网络断开、信号波动,还是服务端问题。要实现“检测网络状态 + 友好提示”,需结合浏览器原生 API 与请求策略优化,而非仅依赖 Ajax 自身。
用 navigator.onLine 快速感知全局联网状态
这是最轻量的入口判断,但注意它只反映设备是否连接到网络(比如连了 Wi-Fi 但没外网),不能保证能通服务器:
- 监听
online/offline事件,在页面级提示用户“已恢复网络”或“网络不可用,请检查连接” - 在发起请求前先检查
navigator.onLine === false,直接跳过请求并提示“当前无网络,操作将暂存” - 注意:该属性在某些浏览器(如 Chrome)中可能延迟更新,建议配合后续更精细的检测
用 fetch 配合超时和错误分类做请求层判断
现代 Ajax 推荐用 fetch,它比 XMLHttpRequest 更易控制超时、中断和错误类型:
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
- 设置合理超时(如 8–12 秒),避免用户长时间等待;超时后提示“网络较慢,请稍候重试”
- 捕获不同错误:
TypeError(常见于网络中断、CORS 失败、DNS 解析失败)通常代表客户端网络异常;AbortError可用于手动取消;HTTP 状态码 0 或 5xx 则倾向服务端问题 - 示例关键逻辑:const controller = new AbortController(); setTimeout(() => controller.abort(), 10000); fetch(url, { signal: controller.signal })...
用“心跳探测”主动识别弱网/断网(进阶推荐)
对关键业务(如表单提交、支付页),可定期发轻量请求(如 GET /health 或空 JSON 接口)验证连通性:
- 每 15–30 秒探测一次,成功则标记
isNetworkHealthy = true;连续失败 2 次则置为false并提示“网络不稳定,部分功能可能受限” - 探测请求本身也要设短超时(3–5 秒)、禁用缓存(
cache: 'no-store'),避免干扰主流程 - 用户触发重要操作前,先检查最近一次心跳结果,决定是否阻断或加二次确认
统一错误处理 + 用户可操作的友好提示
提示不能只写“请求失败”,要降低用户焦虑,并给出明确动作:
- 区分场景文案:网络断开 → “您已离线,请检查 Wi-Fi 或移动数据”;超时 → “网络较慢,正在重试…”(自动重试 1–2 次);服务异常 → “服务暂时繁忙,稍后再试”
- 所有提示应可关闭,且关键操作提供“重试”按钮(绑定原请求逻辑,非刷新页面)
- 对离线场景,可启用本地缓存(如
localStorage存草稿),联网后自动同步,提示“已为您保存,网络恢复后将自动提交”
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










