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 相关文章推荐
HTML页面如何象ASP一样接受参数
Feb 07 Javascript
jquery.combobox中文api和例子,修复了上面的小bug
Mar 28 Javascript
让innerText在firefox火狐和IE浏览器都能用的写法
May 14 Javascript
js实现的常用的左侧导航效果
Oct 17 Javascript
jquery和ajax的关系详细介绍
Nov 29 Javascript
JavaScript动态添加css样式和script标签
Jul 19 Javascript
jQuery实现选项卡功能(两种方法)
Mar 08 Javascript
微信小程序page的生命周期和音频播放及监听实例详解
Apr 07 Javascript
微信小程序 商城开发(ecshop )简单实例
Apr 07 Javascript
js实现股票实时刷新数据案例
May 14 Javascript
JavaScript实现简单动态进度条效果
Apr 06 Javascript
vue框架制作购物车小球动画效果实例代码
Sep 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会话(Session)实现用户登陆功能
2013/06/29 PHP
destoon数据库表说明汇总
2014/07/15 PHP
JavaScript回调(callback)函数概念自我理解及示例
2013/07/04 Javascript
js实现网页标题栏闪烁提示效果实例分析
2014/11/20 Javascript
JavaScript中的方法重载实例
2015/03/16 Javascript
jqGrid中文文档之选项设置
2015/12/02 Javascript
JavaScript实现显示函数调用堆栈的方法
2016/04/21 Javascript
实例分析浏览器中“JavaScript解析器”的工作原理
2016/12/12 Javascript
JS实现AES加密并与PHP互通的方法分析
2017/04/19 Javascript
js中的事件委托或是事件代理使用详解
2017/06/23 Javascript
基于vue-cli创建的项目的目录结构及说明介绍
2017/11/23 Javascript
angular2组件中定时刷新并清除定时器的实例讲解
2018/08/31 Javascript
JS对象属性的检测与获取操作实例分析
2020/03/17 Javascript
ant design vue中表格指定格式渲染方式
2020/10/28 Javascript
跟老齐学Python之Python安装
2014/09/12 Python
跟老齐学Python之for循环语句
2014/10/02 Python
Python数据结构之双向链表的定义与使用方法示例
2018/01/16 Python
Centos7 Python3下安装scrapy的详细步骤
2018/03/15 Python
使用Flask集成bootstrap的方法
2018/07/24 Python
Python人脸识别第三方库face_recognition接口说明文档
2019/05/03 Python
numpy求平均值的维度设定的例子
2019/08/24 Python
英国打印机墨水和碳粉商店:Printerinks
2017/06/30 全球购物
美国知名保健品网站:LuckyVitamin(支持中文)
2017/08/09 全球购物
新西兰床上用品和家居用品购物网站:Adairs
2018/04/27 全球购物
亚马逊海外购:亚马逊美国、英国、日本、德国直邮
2021/03/18 全球购物
应届生财务会计求职信
2013/11/05 职场文书
丧事主持词大全
2014/04/02 职场文书
护士演讲稿优秀范文
2014/04/30 职场文书
青年安全生产示范岗事迹材料
2014/05/04 职场文书
商务经理岗位职责
2014/07/30 职场文书
幼儿园2015年度工作总结
2015/04/01 职场文书
开工典礼致辞
2015/07/29 职场文书
导游词之泰山玉皇顶
2019/12/23 职场文书
一文搞懂Golang 时间和日期相关函数
2021/12/06 Golang
我的收音机情缘
2022/04/05 无线电
Mysql查询时间区间日期列表,不会由于数据表数据影响
2022/04/19 MySQL