前端知识点回顾之重点篇——AJAX
Ajax(Asynchronous JavaScript and XML)
这种技术就是无须刷新页面即可从服务器中取得数据,但不一定是XML数据。在原生方法上,Ajax技术的核心是XMLHttpRequest对象(简称XHR)。
XHR用法
open(method, url, isAsync)
开启一个method类型的请求,url是相对于当前页面(也可以是绝对路径),open方法并不会真正发送请求,而只是启动一个请求已备发送。
send(data)
接收作为请求主体发送的数据,如果不需要必须传入null,因为这个参数对有些浏览器是必要的。调用send后请求就会被分派到服务器。
XHR的属性
在发送请求收到响应后,响应的数据会自动填充XHR对象的属性:
responseText:作为响应主体被返回的文本
responseXML:如果响应的内容类型是”text/xml“或”application/xml“,这个属性中将保存包含着相应数据的XML DOM文档。
status:响应的HTTP状态
statusText:HTTP状态的说明
readyState:表示请求/响应过程中的当前活动阶段,只要这个值发生变化都会触发一次readystatechange事件,因此可以利用这个事件监听异步请求后的响应结果是否可用。(=0表示尚未调用open;=1表示已调用open但没调用send;=2表示已调用send但未收到响应;=3表示已接收到部分数据;=4收到全部响应并且数据可用)
let xhr = new XMLHttpRequest();
xhr.onreadystatechange = function(){ //在open前指定并用DOM0级保证浏览器兼容
if(xhr.readyState == 4){
if((xhr.status >=200 && xhr.status < 300) || xhr.status == 304){
console.log(xhr.responseText);
console.log(xhr.response);
}else{
alert('request was unsuccessful:' + xhr.status);
}
}
}
xhr.open("GET", "http://127.0.0.1:3011", true);
xhr.send(null);
abort:取消异步请求,会停止触发事件,不再允许访问任何与响应有关的对象属性(若访问可能会出错,最好将访问的语句放在try...catch语句中),并在终止请求后对XHR对象进行解引用操作。
HTTP头部信息
- setRequestHeader(name, value) 自定义请求头部信息,在open之后send之前调用。
- getResponseHeader(name) 取得相应的响应头部信息
- getAllResponseHeaders() 取得一个包含所有头部信息的长字符串
GET请求
常用于向服务器查询某些信息,将查询的字符串追加到URL末尾以便将查询条件发给服务器(?name1=value1&name2=value2...)。
特别注意查询信息中的name和value值都必须使用encodeURIComponent()进行编码才能放到URL的末尾。
发送信息有限,因为URL有长度限制。
POST请求
常用于向服务器发送应该被保存的数据,POST请求主体可以包含非常多的数据,而且格式不限。
通过设置Content-Type头部信息表明发送的数据类型,规定数据的编码方式。
application/x-www-form-urlencoded;charset=utf-8
表单形式的内容类型,body中的数据会以key=values的形式进行序列化,而这个编码的过程中,一些特殊符号会通过URL转码转成如4%D3%3F。。。等形式
application/json;charset=utf-8
请求体里面显示的内容是一个标准的json串,而不会像经过URL转码后的数据那样
发送同样的数据,GET请求比POST快(GET有缓存,POST在真正接受数据之前会先将请求头发送给服务器进行确认,然后才真正发送数据)。
XMLHttpRequest2级
对XHR的进一步发展
FormData
序列化表单对象,使用FormData的方便之处体现在不比明确在XHR对象上设置请求头,XHR对象能够识别传入的数据类型是FormData的实例并配置适当的头部信息。
let data1 = new FormData(document.form[0]); //接收表单元素,预先填入键值对
let data = new FormData();
data.append('name', 'simple') //用append方法添加键值对
timeout
xhr对象的timeout属性表示请求在等待响应多少毫秒后终止,并触发ontimeout事件。设置为0表示不设置超时。
xhr.timeout = 1000; //1s
xhr.ontimeout = function(){
alert("Request did not return in a second.");
}
overrideMimeType(‘dataType’)
用于重写从服务器返回的响应MIME的类型
进度
xhr.onprogress 在接收响应期间不断触发,其事件对象event的target属性指向xhr对象,并且包含了三个属性:
- lengthComputable:表示进度信息可否用的布尔值
- position: 表示已经接收的字节数
- totalSize: 表示根据Content-Length响应头部确定的预期字节数
因此有以上的属性,可以创建一个等待响应的进度指示器了
xhr.onprogress = function(event){
var divStatus = document.getElementById("status");
if(event.lengthComputable){
divStatus.innerHTML = "Received " + event.position + "of" + event.totalSize + " bytes.";
}
}
xhr.upload.onprogress 监听POST请求体上传进度
- event.loaded 已经发送的字节数
- event.total 数据体总的字节数
其他类型的HTTP请求
- HEAD 获取资源的头部
和GET方法一样,只是不返回报文主体部分。资源网站 -> 资源服务器里面(查看是否有重复的资源/更新日期,是否存在请求的资源/URI有效性) - CONNECT 隧道通讯
客户端 -> 服务端之间的数据通讯会建立一个通道进行传输,也就是加密 (SSL)
https 其实就是披SSL外皮的http - PUT 发送文件
类似FTP 的文件上传,不带验证机制因此存在安全性问题, REST架构设计才有可能使用 - DELECT 删除文件,PUT相反的方法,同样不带验证机制存在安全隐患问题。
- OPTIONS 询问请求,服务返回支持的请求类型 (GET,POST,HEAD)
前端知识点回顾之重点篇——AJAX的更多相关文章
- 前端知识点回顾之重点篇——CORS
CORS(cross origin resource sharing)跨域资源共享 来源:http://www.ruanyifeng.com/blog/2016/04/cors.html 它允许浏览器 ...
- 前端知识点回顾之重点篇——ES6的Promise对象
Promise Promise 是异步编程的一种解决方案,比传统的解决方案--回调函数和事件--更合理和更强大. 所谓Promise,简单说就是一个容器,里面保存着某个未来才会结束的事件(通常是一个异 ...
- 前端知识点回顾之重点篇——JavaScript异步机制
JavaScript异步机制 来源:https://www.cnblogs.com/zhaodongyu/p/3922961.html JavaScript是单线程异步执行的,单线程意味着代码在任务队 ...
- 前端知识点回顾之重点篇——CSS中vertical align属性
来源:https://www.cnblogs.com/shuiyi/p/5597187.html 行框的概念 红色(line-height)为行框的顶部和底部,绿色(font-size)为字体的高度, ...
- 前端知识点回顾之重点篇——CSS中flex布局
flex布局 来源: http://www.ruanyifeng.com/blog/2015/07/flex-grammar.html?utm_source=tuicool 采用 Flex 布局的元素 ...
- 前端知识点回顾之重点篇——jQuery实现的原理
jQuery jQuery的实现原理 参考:https://blog.csdn.net/zhouziyu2011/article/details/70256659 外层沙箱和命名空间$ 为了避免声明了 ...
- 前端知识点回顾之重点篇——ES6的async函数和module
async函数 ES2017 标准引入了 async 函数,使得异步操作变得更加方便. async 函数是 Generator 函数的语法糖 什么是语法糖? 意指那些没有给计算机语言添加新功能,而只是 ...
- 前端知识点回顾之重点篇——ES6的Iterator和Generator
Iterator 迭代器是一种接口.是一种机制. 为各种不同的数据结构提供统一的访问机制.任何数据结构只要部署 Iterator 接口,就可以完成遍历操作(即依次处理该数据结构的所有成员). Iter ...
- 前端知识点回顾之重点篇——CSS中的BFC
BFC布局(Block Formatting Contexts) 来源:https://www.cnblogs.com/lzbk/p/6057097.html 块级格式化上下文是页面中的一块渲染区域, ...
随机推荐
- 使用LaTeX和KnitR自动生成报告
扩展名为.Rnw(Rtex)的文件就是包含了R代码的LaTeX文档.编译的时候,先用Rscript调用Knitr处理,生成.TeX文档,然后用pdfLaTeX/XeLaTeX编译成PDF. 最方便的编 ...
- 【jekins】jenkins构建触发
一.定时构建的语法 * * * * *(五颗星,中间用空格隔开)第一颗*表示分钟,取值0~59第二颗*表示小时,取值0~23第三颗*表示一个月的第几天,取值1~31第四颗*表示第几月,取值1~12第五 ...
- RabbitMQ 功能
学习完了rabbitmq总一下 RabbitMQ依赖的语言 erlang 第一它可以实现不同程序之间的程序信息储存交互,在易用性.扩展性.高可用性的方面不俗. rabbitmq相当于一个中间人,我们同 ...
- 前端基础(二):CSS
CSS介绍 CSS(Cascading Style Sheet,层叠样式表)定义如何显示HTML元素. 当浏览器读到一个样式表,它就会按照这个样式表来对文档进行格式化(渲染). CSS语法 CSS实例 ...
- LNMP安装与配置之Nginx
Nginx简介 Nginx (engine x) 是一个高性能的HTTP和反向代理web服务器,同时也提供了IMAP/POP3/SMTP服务.Nginx是由伊戈尔·赛索耶夫为俄罗斯访问量第二的Ramb ...
- tar命令--数据解档(三)解压.tar.gz文件报错 gzip:stdin:not in gzip format
毕竟是生产..... 提示以下信息: gzip: stdin: not in gzip format tar: Child returned status 1 tar: Error is not ...
- mongodb命令----批量更改文档字段名
因为mongodb基于javascript的特性,为了体验cursor的威力我们不妨利用js的for循环创建记录 先创建文档 db.createCollection("columnsampl ...
- 《Redis 设计与实现》读书笔记(二)
单机数据库实现 九.数据库 1.服务器中的数据库 一个redis服务器保存多个数据库. struct redisServer { //一个数组,多个数据库 redisDb *db; } 当执行sele ...
- Git始终忽略特定文件的某一行内容
笔者在编写Z Shell文件的时候经常会使用到set -x来开启调试,但不希望提交到仓库 解决方案 Git提供了一种文件过滤器,此方法可以帮助在提交时移除set -x 我们先来编写脚本,如何移除这一行 ...
- RecursiveTask和RecursiveAction的使用 以及java 8 并行流和顺序流(转)
什么是Fork/Join框架 Fork/Join框架是Java7提供了的一个用于并行执行任务的框架, 是一个把大任务分割成若干个小任务,最终汇总每个小任务结果后得到大任务结果的框架. 我 ...