1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > 【ajax】7.请求:请求超时与网络异常处理+取消请求+请求重复发送问题

【ajax】7.请求:请求超时与网络异常处理+取消请求+请求重复发送问题

时间:2023-03-18 07:39:48

相关推荐

【ajax】7.请求:请求超时与网络异常处理+取消请求+请求重复发送问题

〇、前情提要

在看b站视频 - 尚硅谷Web前端Ajax教程初学者零基础入门到精通全套完整版(ajax最新版),中插了这个知识记录一下。

参考:

我的笔记:

【javaweb】b站-尚硅谷Web前端Ajax教程初学者零基础入门到精通全套完整版(ajax最新版) 笔记

/weixin_43210113/article/details/110628389

b站视频 - 尚硅谷Web前端Ajax教程初学者零基础入门到精通全套完整版(ajax最新版)

/video/BV1WC4y1b78y?p=2

笔记视频链接

链接:/s/1Wnwb42-AaqAlg6cQ0PRHwg

提取码:3waj

————————————————————————————

我的笔记:

【ajax】2.NodeJS的安装与介绍+express框架介绍与基本使用

/weixin_43210113/article/details/110636188

我的笔记:

【ajax】3.GET:AJAX案例准备+AJAX请求的基本操作+AJAX设置请求参数

/weixin_43210113/article/details/110656792

我的笔记:

【ajax】4.POST:AJAX发送POST请求+POST设置请求体

/weixin_43210113/article/details/110664818

我的笔记:

【ajax】5.JSON:服务端响应JSON数据+nodemon自动重启工具安装+Missing write access to /usr/local/lib/node_modules解决方法

/weixin_43210113/article/details/110792442

我的笔记:

【ajax】6.IE缓存问题解决

/weixin_43210113/article/details/110798325

一、请求超时与网络异常处理

如没有安装过NodeJS和expressjs请看↓

我的笔记:

【ajax】NodeJS的安装与介绍+express框架介绍与基本使用

/weixin_43210113/article/details/110636188

如没有安装过nodemon请看

我的笔记:

【ajax】5.JSON:服务端响应JSON数据+nodemon自动重启工具安装+Missing write access to /usr/local/lib/node_modules解决方法

/weixin_43210113/article/details/110792442

5-超时与网络异常.html

<!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>请求超时与网络异常</title><style>#result{width:200px;height:100px;border:solid 1px #90b;}</style></head><body><button>点击发送请求</button><div id="result"></div><script>const btn = document.getElementsByTagName('button')[0];const result = document.querySelector('#result');btn.addEventListener('click', function(){const xhr = new XMLHttpRequest();xhr.open("GET",'http://127.0.0.1:8000/delay');xhr.send();xhr.onreadystatechange = function(){if(xhr.readyState === 4){if(xhr.status >= 200 && xhr.status< 300){result.innerHTML = xhr.response;}}}})</script></body></html>

server.js

//1. 引入expressconst express = require('express');//2. 创建应用对象const app = express();//3. 创建路由规则//延时响应app.all('/delay', (request, response) => {//设置响应头 设置允许跨域response.setHeader('Access-Control-Allow-Origin', '*');response.setHeader('Access-Control-Allow-Headers', '*');// 设置延时器setTimeout(() => {//设置响应体response.send('延时响应');}, 3000)});//4. 监听端口启动服务app.listen(8000, () => {console.log("服务已经启动, 8000 端口监听中....");});

此时延时响应延迟3s后显示

当增加超时设置,加一个两秒的限制

//超时设置 2s 设置xhr.timeout = 2000;

此时在第二秒时,会自动取消,状态变为canceled

增加超时回调ontimeout

//超时回调xhr.ontimeout = function(){alert("网络异常, 请稍后重试!!");}

增加网络异常回调onerror

//网络异常回调xhr.onerror = function(){alert("你的网络似乎出了一些问题!");}

模拟时找到online,切换为offline

5-超时与网络异常.html

<!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>请求超时与网络异常</title><style>#result{width:200px;height:100px;border:solid 1px #90b;}</style></head><body><button>点击发送请求</button><div id="result"></div><script>const btn = document.getElementsByTagName('button')[0];const result = document.querySelector('#result');btn.addEventListener('click', function(){const xhr = new XMLHttpRequest();//超时设置 2s 设置xhr.timeout = 2000;//超时回调xhr.ontimeout = function(){alert("网络异常, 请稍后重试!!");}//网络异常回调xhr.onerror = function(){alert("你的网络似乎出了一些问题!");}xhr.open("GET",'http://127.0.0.1:8000/delay');xhr.send();xhr.onreadystatechange = function(){if(xhr.readyState === 4){if(xhr.status >= 200 && xhr.status< 300){result.innerHTML = xhr.response;}}}})</script></body></html>

二、取消请求

6-取消请求.html

<!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>取消请求</title></head><body><button>点击发送</button><button>点击取消</button><script>//获取元素对象const btns = document.querySelectorAll('button');let x = null;btns[0].onclick = function(){x = new XMLHttpRequest();x.open("GET",'http://127.0.0.1:8000/delay');x.send();}// abortbtns[1].onclick = function(){x.abort();}</script></body></html>

abort()为XMLHttpRequest对象自带函数,可以取消请求。

server.js

//1. 引入expressconst express = require('express');//2. 创建应用对象const app = express();//3. 创建路由规则//延时响应app.all('/delay', (request, response) => {//设置响应头 设置允许跨域response.setHeader('Access-Control-Allow-Origin', '*');response.setHeader('Access-Control-Allow-Headers', '*');// 设置延时器setTimeout(() => {//设置响应体response.send('延时响应');}, 3000)});//4. 监听端口启动服务app.listen(8000, () => {console.log("服务已经启动, 8000 端口监听中....");});

测试

按下点击发送三秒内点点击取消,则被取消。

三、请求重复发送问题

问题描述

用户重复按下,但请求未完成时,给服务器很大压力。看waterfall部分。

需求:

重复点击时,取消重复的那个。

7-重复请求问题.html

增加一个变量isSending判断

<!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>重复请求问题</title></head><body><button>点击发送</button><script>//获取元素对象const btns = document.querySelectorAll('button');let x = null;//标识变量let isSending = false; // 是否正在发送AJAX请求btns[0].onclick = function(){//判断标识变量if(isSending) x.abort();// 如果正在发送, 则取消该请求, 创建一个新的请求x = new XMLHttpRequest();//修改 标识变量的值isSending = true;x.open("GET",'http://127.0.0.1:8000/delay');x.send();x.onreadystatechange = function(){if(x.readyState === 4){//修改标识变量isSending = false;}}}// abortbtns[1].onclick = function(){x.abort();}</script></body></html>

server.js

//1. 引入expressconst express = require('express');//2. 创建应用对象const app = express();//3. 创建路由规则//延时响应app.all('/delay', (request, response) => {//设置响应头 设置允许跨域response.setHeader('Access-Control-Allow-Origin', '*');response.setHeader('Access-Control-Allow-Headers', '*');// 设置延时器setTimeout(() => {//设置响应体response.send('延时响应');}, 3000)});//4. 监听端口启动服务app.listen(8000, () => {console.log("服务已经启动, 8000 端口监听中....");});

测试

疯狂点击都会被isSending发现

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。