JS框架设计读书笔记之-异步
setTimeout/setInterval
1. 如果回调执行时间大于间隔时间,真正的间隔时间会大一些。
2. 存在一个最小的时间间隔,即使seTimeout(fn,0),在IE6-IE8中大概为15.6ms,后来精确到10ms,IE10为4ms,其他浏览器大概也是4ms。
3. 回调时间取0时,该函数会在能立即执行的时段触发。
4. 不写第二个参数,浏览器会自动配时间。
5. IE10与标准浏览器都支持额外参数,从第三个参数起,作为回调函数的参数传入。
setTimeout(function(a, b) {
console.log(a + b);
}, 0, 1, 2); //
6. setTimeout方法的时间参数若为极端值,浏览器处理会出现极大差异,某些浏览器会立即执行。(chrome填-9999立即执行了)
Ajax
Ajax核心就是XMLHttpRequest,IE5的时候,微软用ActiveXObject对象来加载数据,这个对象还能做很多其他事情,根据传入的参数来创建一个HTML页面什么的,在IE7的时候,隔离出XMLHttpRequest对象,但是这个对象不支持本地file协议,会出现拒绝访问。
发送请求 open(method,url,async,username,password)
method:用于定义请求http的方法,值包括get、post、put、delete等,有的浏览器还允许自定义方法,不过要求全是大写。
url:参数是请求的主体,一般浏览器都有同源安全策略,跨服请求将被拒绝。get请求时,参数会以querystring的形式放在问号后面。
async:是否异步,默认为true。如果为false,后续调用将被阻塞。
username/password:可选参数,没用过。
接收数据
早期有两种接收数据的属性。responseText对应解码后的字符串,默认为uft-8,responseXML对应一个XML文档。JSON格式兴起后,一般会调用JSON.parse(data)得到JSON数据。一般都是看后台给的文档,如果不给,只能通过getResponseHeader('Content-Type')查看。
创建一个异步请求主要分为下面几个步骤:
//创建异步对象
var xhr = new XMLHttpRequest();
//调用open方法准备开始连接
//get方法
xhr.open('get/post', 'url');
//如果是post请求
if ('post') {
xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded")
}
//发送请求
//get请求传入null
xhr.send('data');
//监听服务器返回的数据
xhr.onreadystatechange = function() {
if (xhr.status == 200 && xhr.readyState == 4) {
//返回数据为xhr.responseText
}
}
可以进行封装,并传入一个对象参数:
//接受url、method、fn、data四个参数
//其中data以对象形式传入
function ajax(obj) {
var url = obj.url;
var method = obj.method.toLowerCase();
var fn = obj.fn;
var Data = parseData(obj.data);
var xhr = new XMLHttpRequest();
if (method == 'get') {
url = url + "?" + Data;
Data = null;
}
xhr.open(method, url);
if (method == 'post') {
xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded")
}
xhr.send(Data);
xhr.onreadystatechange = function() {
if (xhr.status == 200 && xhr.readyState == 4) {
var result = xhr.responseText;
fn(result);
}
}
}
//{a:1,b:2} => a=1&b=2
function parseData(obj) {
var finalData = "";
for (key in obj) {
finalData += key + "=" + obj[key] + "&";
}
return finalData.slice(0, -1);
}
JS框架设计读书笔记之-异步的更多相关文章
- JS框架设计读书笔记之-节点模块
节点的创建 浏览器提供了多种手段创建API,从流行程度依次是document.createElement.innerHTML.insertAdjacentHTML.createContextualFr ...
- JS框架设计读书笔记之-核心模块
随笔记录一下读书心得 1. 框架模块-核心模块 该模块是框架最先执行的部分,jQuery与vue中都有初始化的代码. 模块的功能主要是:对象扩展.数组化.类型判定.事件绑定和解绑.无冲突处理.模块加载 ...
- JS框架设计读书笔记之-动画
基础概念 CSS样式可分为两种,一种值接近无限的集合(color,width),一种值只有几种(display),可以进行计算的样式,产生了动画效果.\ 1. 动画的第一步是获得元素的精确样式值. 2 ...
- JS框架设计读书笔记之-选择器引擎01
选择符 选择符是指CSS样式规则最左边的部分,例如 p{},#id{},.class{},p.class{} 等等 总共可以分为四大类: 并联选择器 => 逗号 => $('div,spa ...
- JS框架设计读书笔记之-小知识
这一篇写一点小知识 JS中0.1+0.2为什么不等于0.3? 关于这个问题之前也很疑虑,老师也只是笼统的讲这是JS的语言问题,但是内部具体的情况却没有讲,看了书才发现原理如此简单. 简单来讲,计算机识 ...
- JS框架设计读书笔记之-选择器引擎02
选择器引擎涉及相关概念 概念 以Sizzle的主函数声明为例,来说明引擎的相关概念. function Sizzle(selector, context, results, seed) { //... ...
- JS框架设计读书笔记之-函数
这次写一些函数 1.模拟Object.keys方法 Object.keys = Object.keys || function(obj){ var a = []; // a[0],a[1]...分别赋 ...
- javascript框架设计(读书笔记)
我觉得多看几本进阶的书 与其十本书读一遍,不如一本书读十遍 读书的启示: 读好书(看推荐) 精读(重复看) 能读厚书(javascript权威指南) Object.keys Object.keys=O ...
- js框架设计1.1命名空间笔记
借到了司徒正美的写的js框架设计一书,司徒大神所著有些看不太懂,果然尚需循序渐进,稳扎js基础之中. 第一张开篇司徒阐述了种子模块的概念 种子模块亦为核心模块,框架最先执行模块,司徒见解应包含:对象扩 ...
随机推荐
- kvm 虚拟化的使用
kvm原理:基于内核空间虚拟化,加载内核模块,来做到虚拟化(简称内核空间).基于qemu连接内核,driver驱动连接kvm的API接口(简称用户空间): hypervisor 管理硬件设备,传统的虚 ...
- 由一次自建库迁移到阿里云RDS引发的性能问题。
刚入职一互联网公司,项目正好处于计划上线的时间,由于公司前不久已经购买了rds服务,领导决定尝试一番! 当然,新事物.云事物还是要谨慎的.安排我先把测试环境数据库迁移上去,这里吐槽一下,往rds迁移一 ...
- 二、js的控制语句
二.流程控制语句 ECMA-262规定了一组流程控制语句.语句定义了ECMAScript中的主要语法,语句通常由一个或者多个关键字来完成给定的任务.诸如:判断.循环.退出等. 语句的定义 在E ...
- Java字符串的匹配问题,String类的matches方法与Matcher类的matches方法的使用比较,Matcher类的matches()、find()和lookingAt()方法的使用比较
参考网上相关blog,对Java字符串的匹配问题进行了简单的比较和总结,主要对String类的matches方法与Matcher类的matches方法进行了比较. 对Matcher类的matches( ...
- 支持向量机SVM(一)
[转载请注明出处]http://www.cnblogs.com/jerrylead 1 简介 支持向量机基本上是最好的有监督学习算法了.最开始接触SVM是去年暑假的时候,老师要求交<统计学习理论 ...
- IEnumerable,ICollection,IList,List之间的区别
做C#的同学们,都知道,一类只能有一个继承类,但可以实现多个接口.这句话就告诉我们:IEnumerable,ICollection,IList,List区别了 // 摘要: // 公开枚举器,该枚举器 ...
- gitlab仓库迁移
遇到一个情况,需要将两个gitlab仓库合并.好在都是使用的ldap账户登陆,用户账户不需要迁移. 实际的使用情况下,需要迁移的主要部分为分组及分组下项目.gitlab的api还是很给力的,能够获取所 ...
- ConcurrentHashMap源码及分析
ConcurrentHashMap是在jdk1.5版本开始,存在于java.util.concurrent包下.本文主要是针对jdk1.7版本. 由于HashMap是非线程安全的,HashTable虽 ...
- 高效实用的.NET开源项目
似乎...很久很久没有写博客了,一直都想写两篇,但是却没有时间写.感觉最近有很多事情需要处理,一直都是疲于奔命,一直到最近才变得有些时间学习和充电.最近没有事情都会看一些博客和开源项目,发现介绍开源项 ...
- JavaEE 对象的串行化(Serialization)
什么情况下需要序列化 a)当你想把的内存中的对象写入到硬盘的时候:b)当你想用套接字在网络上传送对象的时候:c)当你想通过RMI传输对象的时候:再稍微解释一下:a)比如说你的内存不够用了,那计算机就要 ...