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 相关文章推荐
JavaScript的模块化:封装(闭包),继承(原型) 介绍
Jul 22 Javascript
jQuery删除节点的三个方法即remove()detach()和empty()
Dec 27 Javascript
动态加载脚本提升javascript性能
Feb 24 Javascript
jQuery的live()方法对hover事件的处理示例
Feb 27 Javascript
DOM基础教程之使用DOM
Jan 19 Javascript
纯HTML5制作围住神经猫游戏-附源码下载
Aug 23 Javascript
关于javascript中限定时间内防止按钮重复点击的思路详解
Aug 16 Javascript
BootStrap 动态表单效果
Jun 02 Javascript
详解Vue项目中实现锚点定位
Apr 24 Javascript
解决VUE自定义拖拽指令时 onmouseup 与 click事件冲突问题
Jul 24 Javascript
jquery实现广告上下滚动效果
Mar 04 jQuery
三种方式清除vue路由跳转router-link的历史记录
Apr 10 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
《星际争霸》各版本雷兽特点图文解析 雷兽不同形态一览
2020/03/02 星际争霸
深入理解PHP原理之错误抑制与内嵌HTML分析
2011/05/02 PHP
PHP中使用foreach()遍历二维数组的简单实例
2016/06/13 PHP
PHP最常用的正则表达式
2017/02/13 PHP
Laravel 自动生成验证的实例讲解:login / logout
2019/10/14 PHP
很可爱的输入框
2008/08/03 Javascript
JS创建类和对象的两种不同方式
2014/08/08 Javascript
JS获取字符串实际长度(包含汉字)的简单方法
2016/08/11 Javascript
微信小程序 网络API Websocket详解
2016/11/09 Javascript
bootstrap table动态加载数据示例代码
2017/03/25 Javascript
javascript 初学教程及五子棋小程序的简单实现
2017/07/04 Javascript
react系列从零开始_简单谈谈react
2017/07/06 Javascript
对于js垃圾回收机制的理解
2017/09/14 Javascript
详解如何实现一个简单的 vuex
2018/02/10 Javascript
前端面试知识点目录一览
2019/04/15 Javascript
angularjs自定义过滤器demo示例
2019/08/24 Javascript
JS代码简洁方式之函数方法详解
2020/07/28 Javascript
[02:46]2014DOTA2国际邀请赛 选手为你解读比赛MVP充满梦想
2014/07/09 DOTA
解决每次打开pycharm直接进入项目的问题
2018/10/28 Python
在IPython中执行Python程序文件的示例
2018/11/01 Python
python实现LBP方法提取图像纹理特征实现分类的步骤
2019/07/11 Python
Python检查 云备份进程是否正常运行代码实例
2019/08/22 Python
python与mysql数据库交互的实现
2020/01/06 Python
python实现加密的方式总结
2020/01/19 Python
python实现扑克牌交互式界面发牌程序
2020/04/22 Python
Django数据统计功能count()的使用
2020/11/30 Python
CSS3实现3D翻书效果
2016/06/20 HTML / CSS
中国宠物用品商城:E宠商城
2016/08/27 全球购物
《三个小伙伴》教学反思
2014/04/11 职场文书
春游踏青活动方案
2014/08/14 职场文书
镇党政领导班子民主生活会思想汇报
2014/10/11 职场文书
财务负责人岗位职责
2015/02/03 职场文书
毕业论文致谢部分怎么写
2015/05/14 职场文书
老干部座谈会主持词
2015/07/03 职场文书
Python实战之疫苗研发情况可视化
2021/05/18 Python
从结婚开始的恋爱故事。小说《我的美好婚事》TV动画化决定
2022/04/07 日漫