Ajax(Asynchronous Javascript + XML)手艺的中心是XMLHttpRequest对象
,即: XHR
。虽然名字中包括XML,但它所指的仅仅是这类不必革新页面即可从服务器端猎取数据的手艺,其通讯与数据格式无关,并不一定是XML数据。
XMLHttpRequest对象
IE7+、Firefox、Opera、Chrome 和 Safari 都支撑原生的XHR对象。我们可以直接运用XMLHttpRequest
组织函数来建立XHR对象。
var xhr = new XMLHttpRequest();
虽然,IE7之前版本的浏览器中,建立xhr的要领与此有所不同,然则,前端手艺发展到本日,已很少有营业需求是要支撑IE7之前的版本了。因而,这里我略过这一状况。
XHR的用法
运用 XHR对象的时刻,要挪用的第一个要领是open()
,它吸收3个参数:
要发送要求的范例,如: get/post
要求的url
是不是异步发送要求,这个参数是一个布尔值
xhr.open('get', 'example.php', false)
注重:open()要领的挪用并不会真正发送要求,仅仅是启动一个要求以备发送!
别的,只能向同一个域中运用雷同端口和协定的URL发送要求,不然,会涌现毛病。
在实行open()
要领以后,必须再挪用send()
要领,才会真正提议ajax要求。
xhr.open('get', 'example.txt', false);
xhr.send(null);
send()要领吸收一个参数,即:要作为要求主体发送的数据。假如不需要发送数据,那末必须传入null
,由于该参数关于部份浏览器而言是必须的。
本例中的要求是同步的,Javascript代码会比及服务器相应以后再实行。
收到相应后,相应的数据会自动添补XHR对象的属性,相干的属性有:
responseText: 作为相应主体被返回的文本。
responseXML: 假如相应的内容范例是”text/xml”或许”application/xml”,那末这个属性中将保存着包括相应数据的XML DOM文档。
status: 相应的HTTP状况
statusText: HTTP状况的申明
不管内容范例是什么,相应主体的内容都邑保存到responseText
属性中,而关于非XML数据
而言,responseXML 属性的值将会是null
。
收到相应后,一般来说,会先推断 status 是不是为200,这是此次要求胜利的标志。此时,responseText
属性的内容已停当,而且在内容范例准确的状况下,responseXML
也可以访问了。
别的,状况码status
假如是304,那末示意要求的资本没有被修正,可以直接运用浏览器中的缓存,固然,如许的相应也是有用的。
if( (xhr.status >= 200 && xhr.status < 300) || xhr.status == 304 ){
alert(xhr.responseText);
}
else{
alert('fail! status:' + xhr.status);
}
有的浏览器会毛病地报告 204 的状况代码。IE中 XHR 的ActiveX版本会将204设置为1223,而IE中原生的 XHR 则会将 204 范例化为 200。Opera会在获得204时报告 status的值为0。