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实现的真正的iframe高度自适应(兼容IE,FF,Opera)
Mar 07 Javascript
Javascript实现DIV滚动自动滚动到底部的代码
Mar 01 Javascript
『jQuery』取指定url格式及分割函数应用
Apr 22 Javascript
关于Javascript与iframe的那些事儿
Jul 04 Javascript
解析js原生方法创建表格效率测试
Jul 08 Javascript
浅析Javascript使用include/require
Nov 13 Javascript
Javascript小技巧之生成html元素
May 15 Javascript
详细分析JavaScript变量类型
Jul 08 Javascript
基于javascript实现简单的抽奖系统
Apr 15 Javascript
详解Jquery的事件操作和文档操作
Dec 19 Javascript
vue data变量相互赋值后被实时同步的解决步骤
Aug 05 Javascript
vue打包静态资源后显示空白及static文件路径报错的解决
Sep 02 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
限制ckeditor上传图片文件大小的方法
2013/11/15 PHP
phpMyAdmin安装并配置允许空密码登录
2015/07/04 PHP
关于PHP中字符串与多进制转换函数的实例代码
2016/11/03 PHP
php微信公众平台开发(三)订阅事件处理
2016/12/06 PHP
Laravel jwt 多表(多用户端)验证隔离的实现
2019/12/18 PHP
用JS实现的一个include函数
2007/07/21 Javascript
jQuery 选择器理解
2010/03/16 Javascript
使用基于jquery的gamequery插件做JS乒乓球游戏
2011/07/31 Javascript
javascript实现客户端兼容各浏览器创建csv并下载的方法
2015/03/23 Javascript
AngularJS上拉加载问题解决方法
2016/05/23 Javascript
angular双向绑定模拟探索
2016/12/26 Javascript
jQuery实现二维码扫描功能
2017/01/09 Javascript
JS变量及其作用域
2017/03/29 Javascript
JS FormData上传文件的设置方法
2017/07/05 Javascript
Bootstrap实现前端登录页面带验证码功能完整示例
2020/03/26 Javascript
vue组件库的在线主题编辑器的实现思路
2020/04/03 Javascript
Node.js API详解之 assert模块用法实例分析
2020/05/26 Javascript
js通过canvas生成图片缩略图
2020/10/02 Javascript
Python代码的打包与发布详解
2014/07/30 Python
介绍Python的Django框架中的QuerySets
2015/04/20 Python
Python编程实现正则删除命令功能
2017/08/30 Python
python自动12306抢票软件实现代码
2018/02/24 Python
python文本数据相似度的度量
2018/03/12 Python
Python Django view 两种return的实现方式
2020/03/16 Python
python中sort sorted reverse reversed函数的区别说明
2020/05/11 Python
Python文件夹批处理操作代码实例
2020/07/21 Python
python 怎样进行内存管理
2020/11/10 Python
Python读取图像并显示灰度图的实现
2020/12/01 Python
Html5页面内使用JSON动画的实现
2019/01/29 HTML / CSS
泰国综合购物网站:Lazada泰国
2018/04/09 全球购物
联想香港官方网站及网店:Lenovo香港
2018/04/13 全球购物
大学自主招生自荐信
2013/12/16 职场文书
酒后驾驶检讨书
2014/01/27 职场文书
办理房产证委托书
2014/09/18 职场文书
给校长的建议书作文300字
2015/09/14 职场文书
MongoDB修改oplog大小的四种方法
2022/04/11 MongoDB