你还不知道怎么取消重复请求?
你还不知道怎么取消重复请求?
什么是重复请求?在 web 开发过程中,我们经常遇见需要取消重复请求的需求,网络不好时,用户可能重复点击某个按钮就触发了多次相同请求。可能会造成数据错乱的问题。
如何取消重复请求?
axios 中提供了 cancelToken 的属性来取消请求。
原理就是利用了 XMLHttpRequest 对象上的 abort 方法来取消请求
什么样的请求是重复请求?
请求方式
请求地址
请求参数以上三者完全一致即认为该请求完全相同
部分代码注意:这里序列化参数这里用了 JSON.stringify,仅做演示,JSON.stringify 存在的缺陷就不在这里赘述了,注意使用。
1234567891011121314151617181920212223242526272829303132333435const instance = axios.create({ timeout: 1000 * 6 });const pending = [];const cancelToken = axios.CancelToken;const removePend ...
文件下载之response header中获取文件名
文件下载 之 response header 中获取文件名通过 post 获取文件流,并从中获取到文件信息。
fetch API
获取放在 Content-Disposition 的文件信息
需要后端跨域支持,不然会出现,响应头为空的情况,从而得不到文件信息。
附源码
1234567891011121314151617181920212223 /** * 获取文件流,并获取响应头中的文件信息,需要后端跨域支持 */async downloadFile(url, params) { const request = { body: JSON.stringify(params), method: 'POST', headers: { 'Content-Type': 'application/json;charset=UTF-8', } } const response = await fetch(url, request); con ...
vue自定义指令之v-loading(附源码,可CV)
组件 API:TigerUi:http://tigerui.xkongkeji.com
效果图
结构123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156<template> <div :class="['ti-loading', 'ti-' + type]&q ...
socket.io初体验
socket.io 初体验什么是 socket.ioSocket.IO 是一个封装了 Websocket、基于 Node 的 JavaScript 框架,包含 client 的 JavaScript 和 server 的 Node。其屏蔽了所有底层细节,让顶层调用非常简单。另外,Socket.IO 还有一个非常重要的好处。其不仅支持 WebSocket,还支持许多种轮询机制以及其他实时通信方式,并封装了通用的接口。这些方式包含 Adobe Flash Socket、Ajax 长轮询、Ajax multipart streaming 、持久 Iframe、JSONP 轮询等。换句话说,当 Socket.IO 检测到当前环境不支持 WebSocket 时,能够自动地选择最佳的方式来实现网络的实时通信。
客户端(vue+vue-socket.io)安装1npm install vue-socket.io --save
实现
引入 vue-socket.io
12345678import VueSocketIO from 'vue-socket.io';Vue.use( ...
你真的了解prototype和__proto__吗
你真的了解 prototype 和proto吗一句话的图解:实例对象的隐式原型指向构造函数的的原型对象
什么是 prototype
javascript 只有函数默认拥有 prototype 属性,由构造函数构造出来的实例默认是不具有扩展的,除非手动给这个实例加上扩展(当然这已经不是 prototype 了,仅是一个名叫 prototype 的属性而已)。
在 JS 里,万物皆对象。方法(Function)是一个对象,方法的原型(Function.prototype)是对象。
prototype 是一个拥有 [[Construct]] 内部方法的对象才有的属性。
例如函数,对象的方法,ES6 中的类。注意 ES6 中的箭头函数没有 [[Construct]] 方法,因此没有 prototype 这个属性,除非你为它添加一个。
什么是proto
proto就是连接两个实例与原型之间的桥梁,就是我们通常所说的原型链,proto指向构造函数的 prototype 。proto的作用是创建一个原型链,要通过proto,你才能不断的找到所谓的父原型。
每个对象都有一个proto属性
什 ...
Angular你不得不了解的入门小知识
Angular 你不得不了解的入门小知识highlight: androidstudio1. 一个 Angular 程序至少需要一个模块和一个组件。在我们新建项目的时候命令行已经默认生成出来了。
app.component.ts:这个文件表示组件
组件是 Angular 应用的基本构建模块,可以理解为一段带有业务逻辑和数据的 Html,vue 是 js,css,html 整合在一起,当然也可以分开,angular 是分开处理的
2. - 组件相关概念:类似于 Vue
组件元数据装饰器(@Component)简称组件装饰器,用来告知 Angular 框架如何处理一个 TypeScript 类.Component 装饰器包含多个属性,这些属性的值叫做元数据,Angular 会根据这些元数据的值来渲染组件并执行组件的逻辑
模板(Template)–> html
我们可以通过组件自带的模板来定义组件的外观,模板以 html 的形式存在,告诉 Angular 如何来渲染组件,一般来 说,模板看起来很像 html,但是我们可以在模板中使用 Angular 的数据绑定语法,来呈现控制器 ...
关于XSS与CSRF你应该知道的
关于 XSS 与 CSRF 你应该知道的在 Web 安全领域中,XSS 和 CSRF 是最常见的攻击方式。接下来就简单的说一下他们该怎么防范。
什么是 XSSXSS 攻击是指攻击者在网站上注入恶意的客户端代码,通过恶意脚本对客户端网页进行篡改,从而在用户浏览网页时,对用户浏览器进行控制或者获取用户隐私数据的一种攻击方式。
XSS 攻击的防范现在主流的浏览器内置了防范 XSS 的措施,例如 CSP。但对于开发者来说,也应该寻找可靠的解决方案来防止 XSS 攻击。
HttpOnly 防止劫取 Cookie
HttpOnly 最早由微软提出,至今已经成为一个标准。浏览器将禁止页面的 Javascript 访问带有 HttpOnly 属性的 Cookie。严格来说,HttpOnly 并非阻止 XSS 攻击,而是能阻止 XSS 攻击后的 Cookie 劫持攻击。
输入检查
不要相信用户的任何输入。 对于用户的任何输入要进行检查、过滤和转义。建立可信任的字符和 HTML 标签白名单,对于不在白名单之列的字符或者标签进行过滤或编码。
补充:输入检查一般是检查用户输入的数据中是否包含 <,& ...
LeetCode刷题日记之链表中倒数第k个节点
LeetCode 刷题日记之链表中倒数第 k 个节点
解题思路:遍历出链表长度,设置一个计数点,当找到倒数第 K 个节点时返回,链表(感觉走了笨办法)
1234567891011121314151617181920var getKthFromEnd = function (head, k) { let conut = 1; let index = 1; let temp = head; while (temp && temp.next) { conut++; temp = temp.next; } while (head) { if (conut - k + 1 === index) { return head; } if (head.next) { index++; head = head.next; } else { head = null; } }}; ...
LeetCode刷题日记之顺时针打印矩阵
LeetCode 刷题日记之顺时针打印矩阵解题思路:把矩阵分为一个一个的圆环,顺时针遍历圆环即可(设置边界值,根据边界值,遍历圆环),只剩下一行,从左到右依次添加,只剩下一列时,从上到下依次添加。
1234567891011121314151617181920212223242526272829303132333435let matrix = [ [1, 2, 3], [4, 5, 6], [7, 8, 9],];let spiralOrder = (matrix) => { if (matrix.length == 0) return []; let result = []; let top = 0; let bottom = matrix.length - 1; let left = 0; let right = matrix[0].length - 1; while (top < bottom && left < right) { for (let i = left; i < right; i+ ...
LeetCode刷题日记之找出数组中重复数字
LeetCode 刷题日记之找出数组中重复数字对于一段程序,用不同的方法写消耗时间差距还是很大的,下面是本题的逐渐改进过程。
遍历123456789101112131415let nums = [0, 1, 2, 3, 4, 11, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15];let findRepeatNumber = function (nums) { let startIndex = 0; let result; while (startIndex < nums.length) { let start = nums[startIndex]; for (let i = startIndex + 1; i < nums.length; i++) { if (start === nums[i]) { result = nums[i]; } } startIndex++; } return result; ...