Ajax(Asynchronous Javascript + XML)技术的核心是XMLHttpRequest对象
,即: XHR
。虽然名字中包含XML,但它所指的仅仅是这种无须刷新页面便可从服务器端获取数据的技术,其通讯与数据格式无关,并不必定是XML数据。javascript
IE7+、Firefox、Opera、Chrome 和 Safari 都支持原生的XHR对象。咱们能够直接使用XMLHttpRequest
构造函数来建立XHR对象。php
var xhr = new XMLHttpRequest();
html
虽然,IE7以前版本的浏览器中,建立xhr的方法与此有所不一样,可是,前端技术发展到今天,已经不多有业务需求是要支持IE7以前的版本了。所以,这里我略过这一状况。前端
使用 XHR对象的时候,要调用的第一个方法是open()
,它接受3个参数:java
xhr.open('get', 'example.php', false)
ajax
注意:open()方法的调用并不会真正发送请求,仅仅是启动一个请求以备发送!浏览器
另外,只能向同一个域中使用相同端口和协议的URL发送请求,不然,会出现错误。缓存
在执行open()
方法以后,必须再调用send()
方法,才会真正发起ajax请求。服务器
xhr.open('get', 'example.txt', false); xhr.send(null);
send()方法接收一个参数,即:要做为请求主体发送的数据。若是不须要发送数据,那么必须传入null
,由于该参数对于部分浏览器而言是必需的。app
本例中的请求是同步的,Javascript代码会等到服务器响应以后再执行。
收到响应后,响应的数据会自动填充XHR对象的属性,相关的属性有:
不管内容类型是什么,响应主体的内容都会保存到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。
原文连接:http://www.4455q.com/ajax-comet-javascript-chapter21-note1.html