阅读 141

Ajax请求超时与网络异常处理图文详解

Ajax请求超时与网络异常处理图文详解

最近在项目中遇到一个问题,当加载数据量特别大的时候会出现加载超时现象,所以这篇文章主要给大家介绍了关于Ajax请求超时与网络异常处理的相关资料,需要的朋友可以参考下

别用IE浏览器!!!

问题

当浏览器请求超时或者网络异常的时候,我们程序需要做出什么处理和反应呢?

ps:代码我会在后面贴出来,思路最重要

# 请求超时 首先在==express==逻辑上是这样子写的

123456789// 模拟请求超时app.all("/delay", (request, response) => {    response.setHeader('Access-Control-Allow-Origin', '*');    response.setHeader('Access-Control-Allow-Headers', '*');     setTimeout(() => {        response.send('接收成功:模拟请求超时');    }, 3000);})

前端的请求

在这里插入图片描述

一开始没有加请求时间的设置,是可以输出结果的

在这里插入图片描述

那么现在呢,我们需要为请求加上一个限制时间,超过这个限制时间,浏览器就会认为此时请求超时了。如下加上

在这里插入图片描述

保存代码,然后到浏览器刷新,打开控制台

在这里插入图片描述

选择network,然后点击按钮,观察network的请求状态

首先一开始是pending状态(请求中)

在这里插入图片描述

超过了请求的阈值(2s),此时显示请求被取消了,显示cancel状态,而不是finish

在这里插入图片描述

但是在实际业务中,你不可能让每个用户打开控制台看请求有没有超时吧,所以我们可以加一个请求超时回调来完成信息弹窗提醒

在这里插入图片描述

我们刷新运行,发现此时就有一个弹窗提示了

在这里插入图片描述

那么,请求超时就演示到这来

网络异常

现在来看看网络异常我们需要怎么处理,那么网络异常在前端js里面也是有回调函数的,如下

在这里插入图片描述

然后,我们通过浏览器的控制台模拟离线状态

在这里插入图片描述

然后,我们点击按钮查看效果

在这里插入图片描述

莫得问题!

代码

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354<!DOCTYPE html><html lang="en"> <head>    <meta charset="UTF-8" />    <titile>超时与网络异常处理</titile>    <style>        #content {            width: 400px;            height: 200px;            border: 1px solid rgb(4, 247, 25);            border-width: 3px;            margin: 20px 0 20px 0;        }    </style></head> <body>    <button type="button">提交</button>    <div id="content"></div>    <script>        const btn = document.getElementsByTagName('button')[0];        const res = document.getElementById('content');        btn.onclick = function() {             const xhr = new XMLHttpRequest();            xhr.timeout = 2000;             xhr.ontimeout = function() {                alert('请求超时,请检查网络是否可用!');            }             xhr.onerror = function() {                alert('你的网络开小差了,请重新连接网络试试');            }             xhr.open('GET', 'http://127.0.0.1:8080/delay');             xhr.send();             xhr.onreadystatechange = function() {                if (xhr.readyState === 4) {                    if (xhr.status >= 200 && xhr.status < 300) {                        res.innerHTML = xhr.response;                    }                } else {                 }            }        };    </script></body> </html>
1234567891011121314151617const express = require("express"); const app = express(); // 模拟请求超时app.all("/delay", (request, response) => {    response.setHeader('Access-Control-Allow-Origin', '*');    response.setHeader('Access-Control-Allow-Headers', '*');     setTimeout(() => {        response.send('接收成功:模拟请求超时');    }, 3000);}) app.listen(8080, () => {    console.log('正在监听8080端口');});

总结

到此这篇关于Ajax请求超时与网络异常处理的文章就介绍到这了

原文链接:https://blog.csdn.net/YSJ367635984/article/details/117127422

文章分类
后端
版权声明:本站是系统测试站点,无实际运营。本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 XXXXXXo@163.com 举报,一经查实,本站将立刻删除。
相关推荐