XMLHttpRequest
Ajax手艺能向效劳器请求分外的数据而无需加载页面。而这一手艺的中心就是XMLHttpRequest对象(简称XHR)。
XMLHttpRequest要领
// 竖立xhr对象
var xhr = new XMLHttpRequest();
xhr.open(method,url,async)
吸收3个参数:要发送的请求的范例,请求的URL,示意是不是异步发送请求的布尔值。
URL相对于当前页面(也能够运用绝对路径)
挪用open()要领不会真正发送请求,而只是启动一个请求以备发送
// 初始化请求
xhr.open('get',example.php,true)
Note:只能向同一个域(子域名和主域名都得雷同)运用雷同端口号和协定的URL发送请求。假如URL与启动请求的页面有任何差异,都邑激发平安毛病。
// 一个域名的构成
协定 子域名 主域名 端口号
http:// www. abc.com : 8080
请求范例
GET请求
用于向效劳器查询某些信息。
能够将查询字符串参数追加到URL末端,以便将信息发送给效劳器。对XHR而言,位于传入open()
要领的URL末端的查询字符串必需经由准确的编码才行。
Note:查询字符串中的每一个参数的称号和值都必需运用encodeURIComponent()
举行编码,然后才放到URL的末端;而且所著名-值对都必需由亲睦(&)分开。
function addURLParam ( url, name, value ) {
url += url.indexOf('?') === -1 ? '?' : '&';
url += encodeURIComponent(name) + '=' + encodeURIComponent(value);
return url;
}
POST请求
用于向效劳器发送应当被保留的信息。
POST请求应当把数据作为请求的主体提交。
PUT请求
向效劳器发送想要更新的信息来替代效劳上旧的信息
DELETE请求
删除效劳上的信息。
Note:效劳器并不会强制实行它获得的每一个请求。假如你随便的阅读一个网站,并请求删除它的重要页面,很可能会失利
xhr.send(string)
吸收一个参数,即要作为请求主体发送的数据。假如不需要经由历程请求主体发送数据,则必需传入null
xhr.abort()
作废异步请求。
挪用这个要领后,xhr对象会住手触发事宜
不允许xhr对象接见任何与响应有关的对象属性
xhr.setRequestHeader()
设置自定义的头部信息。
吸收两个参数:1.头部字段的称号和头部字段的值。
必需在挪用send()要领之前且open()要领以后,挪用此要领。
xhr.open('get', 'example.php', true);
xhr.serRequestHeader('MyHeader', 'MyValue');
xhr.send(null);
xhr.getResponseHeader()
传入头部字段称号,能够获得响应的头部信息,查询响应中某个字段的值
xhr.getAllResponsHeaders()
能够获得一切头部信息的长字符串
XMLHttpRequest属性
/* 发送同步请求 */
// 竖立xhr对象
var xhr = new XMLHttpRequest();
// 初始化请求
xhr.open('get',example.php,false);
// 发送请求
xhr.send(null);
在收到响应后,响应的数据会自动添补XHR对象的属性,相干的属性简介以下
与响应有关的xhr属性
status
: 响应的HTTP状况码statusText
: HTTP状况的申明 // 跨阅读器运用不可靠responseText
: 作为响应主体被返回的文本,获得字符串情势的响应数据responseXML
: 假如响应的内容为’text/xml’或’application/xml’,这个属性中将保留包含着响应数据的XML DOM文档
HTTP状况码
1XX 提醒信息 – 示意请求已被胜利吸收,继承处置惩罚
2XX 胜利 – 示意请求已被胜利吸收,明白,接收
3XX 重定向 – 要完成请求必需举行更进一步的处置惩罚
4XX 客户端毛病 – 请求有语法毛病或请求没法完成
5XX 效劳器端毛病 – 效劳器未能完成正当的请求
/* 发送异步请求 */
// 竖立xhr对象
var xhr = new XMLHttpRequest();
// 监听请求状况
xhr.onreadystatechange = function () {
if(xhr.readyState === 4) {
if (xhr.status >= 200 && xhr.status < 300 || xhr.status = 304) {
alert(xhr.responseText);
} else {
alert('Request was unsuccessful: ' + xhr.status);
}
}
}
// 初始化请求
xhr.open('get',example.php,true);
// 发送请求
xhr.send(null);
示意请求响应历程的xhr属性
readyState
:0。未初始化。还没有挪用open()要领
1。效劳器竖立衔接。已挪用open()要领,但未挪用send()要领
2。请求已吸收。挪用send()要领,但未吸收到响应
3。请求处置惩罚中。吸收到部份数据响应
4。请求完成。吸收到悉数响应数据,能够在客户端运用了。
HTTP响应与请求体
http—无状况协定
请求历程
1.竖立TCP衔接
2.Web阅读器向效劳器发送请求敕令
3.Web阅读器发送请求头信息
4.Web效劳器应对
5.Web效劳器发送应对头信息
6.Web效劳器向阅读器发送数据
7.Web效劳器封闭TCP衔接
HTTP请求包(阅读器信息)
Request包的构造, Request包分为3部份
第一部份叫Request line(请求行)
第二部份叫Request header(请求头)
第三部份是body(主体)。header和body之间有个空行,请求包的例子所示:
GET /domains/example/ HTTP/1.1 //请求行: 请求要领 请求URI HTTP协定/协定版本
Host:www.iana.org //效劳端的主机名
User-Agent:Mozilla/5.0 (Windows NT 6.1)
AppleWebKit/537.4 (KHTML, like Gecko) Chrome/22.0.1229.94 Safari/537.4 // 阅读器信息
Accept:text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 //客户端能吸收的mine
Accept-Encoding:gzip,deflate,sdch //是不是支撑流紧缩
Accept-Charset:UTF-8,*;q=0.5 //客户端字符编码集
//空行,用于支解请求头和音讯体
//音讯体,请求资本参数,比方POST通报的参数
HTTP响应包(效劳器信息)
和请求包一样分为3个部份。
HTTP/1.1 200 OK // 状况行
Server: nginx/1.0.8 // 效劳器运用的WEB软件名及版本
Date:Date: Tue, 30 Oct 2012 04:14:25 GMT // 发送时候
Content-Type: text/html // 效劳器发送信息的范例
Transfer-Encoding: chunked // 示意发送HTTP包是分段发的
Connection: keep-alive // 坚持衔接状况
Content-Length: 90 // 主体内容长度
//空行 用来支解音讯头和主体
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"... //音讯体
FormDate
为序列化表单以及竖立于表单花样雷同的数据供应了方便。
var data = new FormData();
data.append('name','Nicholas');
跨资本共享
CORS(Cross-Origin Resource Sharing, 跨资本共享):定义了在必需接见跨源资本时,阅读器与效劳器怎样沟通。
基本思想:运用自定义的HTTP头部让阅读器与效劳器举行沟通,从而决议请求或响应是应当胜利照样应当失利。
IE对CORS的完成
cookie不会随请求发送,也不会随响应返回
只能设置请求头部信息中的Conte-type字段
不能接见响应头部信息
只支撑GET和POST请求
其他阅读器对CORS的完成
不能运用setRequestHeader()设置自定义头部
不能发送和吸收cookie
挪用getAllResponseHeaders()要领总会返回空字符串
Comet
一种效劳器向页面推送数据的手艺。
完成体式格局:
长轮询
HTTP流
长轮询
起首轮询的意义就是,阅读器定时向效劳器发送请求,看有没有更新的数据。
短轮询(也就是传统轮询):阅读器定时向效劳器发送请求,与效劳器竖立
长轮询:
HTTP流
在页面的全部周期内,只运用一个HTTP衔接。
具体来说,就是阅读器向效劳器发送一个请求,而效劳器坚持衔接翻开