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 相关文章推荐
一些易混淆且不常用的属性,希望有用
Jan 29 Javascript
js 多浏览器分别判断代码
Apr 01 Javascript
jquery选择器(常用选择器说明)
Sep 28 Javascript
JQuery制作的放大效果的popup对话框(未添加任何jquery plugin)分享
Apr 28 Javascript
javascript实现瀑布流自适应遇到的问题及解决方案
Jan 28 Javascript
AngularJS基础 ng-model 指令详解及示例代码
Aug 02 Javascript
Node.js和Express简单入门介绍
Mar 24 Javascript
vue 将页面公用的头部组件化的方法
Dec 18 Javascript
vee-validate vue 2.0自定义表单验证的实例
Aug 28 Javascript
Vue的生命周期操作示例
Sep 17 Javascript
vue自定义指令实现仅支持输入数字和浮点型的示例
Oct 30 Javascript
解决vue刷新页面以后丢失store的数据问题
Aug 11 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数组操作
2011/12/30 PHP
Window下PHP三种运行方式图文详解
2013/06/11 PHP
Win下如何安装PHP的APC拓展
2013/08/07 PHP
ubuntu12.04使用c编写php扩展模块教程分享
2013/12/25 PHP
thinkPHP+PHPExcel实现读取文件日期的方法(含时分秒)
2016/07/07 PHP
PHP基于正则批量替换Img中src内容实现获取缩略图的功能示例
2017/06/07 PHP
PHP新特性之字节码缓存和内置服务器
2017/08/11 PHP
bcastr2.0 通用的图片浏览器
2006/11/22 Javascript
jQuery1.6 正式版发布并提供下载
2011/05/05 Javascript
SwfUpload在IE10上不出现上传按钮的解决方法
2013/06/25 Javascript
javascript中interval与setTimeOut的区别示例介绍
2014/03/14 Javascript
详解JavaScript的AngularJS框架中的作用域与数据绑定
2016/03/04 Javascript
jquery 将当前时间转换成yyyymmdd格式的实现方法
2016/06/01 Javascript
AngularJs IE Compatibility 兼容老版本IE
2016/09/01 Javascript
在localStorage中存储对象数组并读取的方法
2016/09/24 Javascript
jQuery操作css样式
2017/05/15 jQuery
BootStrap导航栏问题记录
2017/07/31 Javascript
深入理解JS的事件绑定、事件流模型
2018/05/13 Javascript
js实现前面自动补全位数的方法
2018/10/10 Javascript
mongodb初始化并使用node.js实现mongodb操作封装方法
2019/04/02 Javascript
小程序实现悬浮搜索框
2019/07/12 Javascript
如何在vue中使用HTML 5 拖放API
2021/01/14 Vue.js
[03:55]2016国际邀请赛中国区预选赛首日TOP10精彩集锦
2016/06/27 DOTA
python实现简单的文字识别
2018/11/27 Python
pyttsx3实现中文文字转语音的方法
2018/12/24 Python
Django中celery执行任务结果的保存方法
2019/07/12 Python
Django项目之Elasticsearch搜索引擎的实例
2019/08/21 Python
PyTorch学习:动态图和静态图的例子
2020/01/06 Python
Python3.x+pyqtgraph实现数据可视化教程
2020/03/14 Python
GAZMAN官网:澳大利亚领先的男装品牌
2019/12/19 全球购物
临床医学应届生求职信
2013/11/06 职场文书
工程专业毕业生自荐信范文
2013/12/25 职场文书
企业管理标语
2014/06/10 职场文书
走群众路线剖析材料
2014/10/09 职场文书
高三教师工作总结2015
2015/07/21 职场文书
oracle设置密码复杂度及设置超时退出的功能
2022/06/28 Oracle