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


Posted in Javascript onMay 23, 2021

别用IE浏览器!!!

问题

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

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

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

// 模拟请求超时
app.all("/delay", (request, response) => {
    response.setHeader('Access-Control-Allow-Origin', '*');
    response.setHeader('Access-Control-Allow-Headers', '*');

    setTimeout(() => {
        response.send('接收成功:模拟请求超时');
    }, 3000);
})

前端的请求

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

网络异常

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

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

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

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

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

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

莫得问题!

代码

<!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>
const 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请求超时与网络异常处理的文章就介绍到这了,更多相关Ajax请求超时内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Javascript 相关文章推荐
jQuery 判断元素上是否绑定了事件
Oct 28 Javascript
JavaScript replace(rgExp,fn)正则替换的用法
Mar 04 Javascript
jQuery 局部div刷新和全局刷新方法总结
Oct 05 Javascript
利用transition实现文字上下抖动的效果
Jan 21 Javascript
微信小程序 this和that详解及简单实例
Feb 13 Javascript
vue新vue-cli3环境配置和模拟json数据的实例
Sep 19 Javascript
vue头部导航动态点击处理方法
Nov 02 Javascript
JS实现随机生成10个手机号的方法示例
Dec 07 Javascript
a标签调用js的方法总结
Sep 05 Javascript
react基本安装与测试示例
Apr 27 Javascript
浅谈JavaScript中你可能不知道URL构造函数的属性
Jul 13 Javascript
Element DateTimePicker日期时间选择器的使用示例
Jul 27 Javascript
vue-element-admin项目导入和导出的实现
May 21 #Vue.js
vue2实现provide inject传递响应式
May 21 #Vue.js
JS + HTML 罗盘式时钟的实现
JavaScript canvas实现流星特效
May 20 #Javascript
vue使用节流函数的踩坑实例指南
vue实现同时设置多个倒计时
May 20 #Vue.js
Vue和Flask通信的实现
You might like
SONY ICF-SW55的电路分析
2021/03/02 无线电
附件名前加网站名
2008/03/23 PHP
php获取远程文件的内容和大小
2015/11/03 PHP
php微信公众号开发之欢迎老朋友
2018/10/20 PHP
jQuery EasyUI API 中文文档 - Menu菜单
2011/10/03 Javascript
jquery 图片缩放拖动的简单实例
2014/01/08 Javascript
理解javascript定时器中的setTimeout与setInterval
2016/02/23 Javascript
同步异步动态引入js文件的几种方法总结
2016/09/23 Javascript
BootstrapTable refresh 方法使用实例简单介绍
2017/02/20 Javascript
如何使用angularJs
2017/05/08 Javascript
对存在JavaScript隐式类型转换的四种情况的总结(必看篇)
2017/08/31 Javascript
基于iview的router常用控制方式
2019/05/30 Javascript
vue项目中监听手机物理返回键的实现
2020/01/18 Javascript
使用Vue实现一个树组件的示例
2020/11/06 Javascript
[17:00]DOTA2 HEROS教学视频教你分分钟做大人-帕克
2014/06/10 DOTA
[47:52]完美世界DOTA2联赛PWL S2 PXG vs InkIce 第二场 11.26
2020/11/30 DOTA
Python比较文件夹比另一同名文件夹多出的文件并复制出来的方法
2015/03/05 Python
python日志记录模块实例及改进
2017/02/12 Python
Python实现读取TXT文件数据并存进内置数据库SQLite3的方法
2017/08/08 Python
Python3读取Excel数据存入MySQL的方法
2018/05/04 Python
Python requests库用法实例详解
2018/08/14 Python
python梯度下降法的简单示例
2018/08/31 Python
基于python计算滚动方差(标准差)talib和pd.rolling函数差异详解
2020/06/08 Python
python3爬虫GIL修改多线程实例讲解
2020/11/24 Python
python dir函数快速掌握用法技巧
2020/12/09 Python
pandas统计重复值次数的方法实现
2021/02/20 Python
python中使用asyncio实现异步IO实例分析
2021/02/26 Python
Tenstickers法国:墙贴和装饰贴纸
2019/08/26 全球购物
PHP经典面试题
2016/09/03 面试题
逻辑链路控制协议
2016/10/01 面试题
农场厂长岗位职责
2013/12/28 职场文书
我有一个梦想演讲稿
2014/05/05 职场文书
董事长致辞
2015/07/29 职场文书
青年干部培训班学习心得体会
2016/01/06 职场文书
咖啡厅里的创业计划书
2019/08/21 职场文书
Nginx文件已经存在全局反向代理问题排查记录
2022/07/15 Servers