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+CSS 实现随滚动条增减的汽水瓶中的液体效果
Sep 26 Javascript
jquery win 7透明弹出层效果的简单代码
Aug 06 Javascript
使用javascript实现页面定时跳转总结篇
Sep 21 Javascript
JS特效实现图片自动播放并可控的效果
Jul 31 Javascript
jQuery on()方法示例及jquery on()方法的优点
Aug 27 Javascript
判断数组是否包含某个元素的js函数实现方法
May 19 Javascript
将json转换成struts参数的方法
Nov 08 Javascript
angularjs $http实现form表单提交示例
Jun 09 Javascript
React服务端渲染(总结)
Jul 01 Javascript
AngularJS实现注册表单验证功能
Oct 16 Javascript
小程序云开发初探(小结)
Oct 24 Javascript
JavaScript实现身份证验证代码实例
Aug 26 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
提升PHP执行速度全攻略
2006/10/09 PHP
PHP面向对象的进阶学习(抽像类、接口、final、类常量)
2012/05/07 PHP
linux下编译安装memcached服务
2014/08/03 PHP
php实现保存周期为1天的购物车类
2017/07/07 PHP
php探针使用原理和技巧讲解
2019/09/17 PHP
jQuery方法简洁实现隔行换色及toggleClass的使用
2013/03/15 Javascript
JS获取html对象的几种方式介绍
2013/12/05 Javascript
JS中自定义定时器让它在某一时刻执行
2014/09/02 Javascript
js实现鼠标点击左上角滑动菜单效果代码
2015/09/06 Javascript
JS+CSS实现电子商务网站导航模板效果代码
2015/09/10 Javascript
Js获取图片原始宽高的实现代码
2016/05/17 Javascript
javascript数组遍历的方法实例分析
2016/09/13 Javascript
jQuery时间日期三级联动(推荐)
2016/11/27 Javascript
深入理解JavaScript的async/await
2018/08/05 Javascript
使用react render props实现倒计时的示例代码
2018/12/06 Javascript
jQuery操作cookie的示例代码
2019/06/05 jQuery
从零学python系列之从文件读取和保存数据
2014/05/23 Python
Python求两个文本文件以行为单位的交集、并集与差集的方法
2015/06/17 Python
《Python学习手册》学习总结
2018/01/17 Python
Python 十六进制整数与ASCii编码字符串相互转换方法
2018/07/09 Python
从运行效率与开发效率比较Python和C++
2018/12/14 Python
python之yield和Generator深入解析
2019/09/18 Python
Python识别处理照片中的条形码
2020/11/16 Python
网络艺术零售业的先驱者:artrepublic
2017/09/26 全球购物
使用Vue.js和MJML创建响应式电子邮件
2021/03/23 Vue.js
教师研修随笔感言
2014/01/23 职场文书
五一手机促销方案
2014/03/08 职场文书
2014学雷锋活动心得体会
2014/03/10 职场文书
《泉水》教学反思
2014/04/11 职场文书
预备党员转正考核材料
2014/06/03 职场文书
十佳党员事迹材料
2014/08/28 职场文书
2014小学生国庆65周年演讲稿
2014/09/21 职场文书
有限责任公司股东合作协议书范本
2014/10/30 职场文书
2014幼儿园家长工作总结
2014/11/10 职场文书
大学迎新生的欢迎词
2019/06/25 职场文书
MySQL sql模式设置引起的问题
2022/05/15 MySQL