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 相关文章推荐
js中的值类型和引用类型小结 文字说明与实例
Dec 12 Javascript
利用jquery.qrcode在页面上生成二维码且支持中文
Feb 12 Javascript
浅谈Javascript的静态属性和原型属性
May 07 Javascript
jQuery实现图片左右滚动特效
Apr 20 Javascript
JS实现随页面滚动显示/隐藏窗口固定位置元素
Feb 26 Javascript
js实现一键复制功能
Mar 16 Javascript
JavaScript门面模式详解
Oct 19 Javascript
React Native AsyncStorage本地存储工具类
Oct 24 Javascript
微信小程序checkbox组件使用详解
Jan 31 Javascript
js中的数组对象排序分析
Dec 11 Javascript
Angular 中使用 FineReport不显示报表直接打印预览
Aug 21 Javascript
如何使用RoughViz可视化Vue.js中的草绘图表
Jan 30 Vue.js
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
杏林同学录(五)
2006/10/09 PHP
php版微信自动获取收货地址api用法示例
2016/09/22 PHP
php curl 模拟登录并获取数据实例详解
2016/12/22 PHP
延时重复执行函数 lLoopRun.js
2007/05/08 Javascript
js中if语句的几种优化代码写法
2011/03/12 Javascript
js 延迟加载 改变JS的位置加快网页加载速度
2012/12/11 Javascript
将两个div左右并列显示并实现点击标题切换内容
2013/10/22 Javascript
兼容主流浏览器的iframe自适应高度js脚本
2014/01/10 Javascript
HTML5游戏引擎LTweenLite实现的超帅动画效果(附demo源码下载)
2016/01/26 Javascript
Bootstrap基本样式学习笔记之图片(6)
2016/12/07 Javascript
详解前端构建工具gulpjs的使用介绍及技巧
2017/01/19 Javascript
js按条件生成随机json:randomjson实现方法
2017/04/07 Javascript
利用JS制作万年历的方法
2017/08/16 Javascript
AngularJS select设置默认值的实现方法
2017/08/25 Javascript
微信小程序商品详情页规格属性选择示例代码
2017/10/30 Javascript
jQuery实现的鼠标拖动浮层功能示例【拖动div等任何标签】
2018/12/29 jQuery
用Golang运行JavaScript的实现示例
2019/11/25 Javascript
js中apply和call的理解与使用方法
2019/11/27 Javascript
JavaScript利用键盘码控制div移动
2020/03/19 Javascript
[03:42]2014DOTA2国际邀请赛 第三日比赛排位扑朔迷离
2014/07/12 DOTA
[01:01]青春无憾,一战成名——DOTA2全国高校联赛开启
2018/02/25 DOTA
python实现批量下载新浪博客的方法
2015/06/15 Python
Django实现学员管理系统
2019/02/26 Python
Python3实现的简单工资管理系统示例
2019/03/12 Python
PyQt QCombobox设置行高的方法
2019/06/20 Python
Django如何简单快速实现PUT、DELETE方法
2019/07/24 Python
Python hashlib和hmac模块使用方法解析
2020/12/08 Python
安装不同版本的tensorflow与models方法实现
2021/02/20 Python
德国柯吉澳趣味家居:Koziol
2017/08/24 全球购物
美国汽车轮胎和轮毂销售网站:Tire Rack
2018/01/11 全球购物
请问软件开发中的设计模式你会使用哪些
2015/05/13 面试题
奥巴马经典演讲稿
2014/09/13 职场文书
公司授权委托书格式样本
2014/10/01 职场文书
2014年机关作风建设工作总结
2014/10/23 职场文书
四年级语文教学反思
2016/03/03 职场文书
导游词之峨眉山
2019/12/16 职场文书