# 原生Ajax学习 ## 示例 > 这里先展示一个比较复杂的应用写法,原理什么的看下面介绍。
> 注意,本例是学习笔记,[学习地址](http://www.imooc.com/learn/250)
>[源码](http://img.mukewang.com/down/54f903090001276f00000000.zip) ```js document.getElementById("save").onclick = function() { var request = new XMLHttpRequest(); request.open("POST", "server.php"); var data = "name=" + document.getElementById("staffName").value + "&number=" + document.getElementById("staffNumber").value + "&sex=" + document.getElementById("staffSex").value + "&job=" + document.getElementById("staffJob").value; request.setRequestHeader("Content-type","application/x-www-form-urlencoded"); request.send(data); request.onreadystatechange = function() { if (request.readyState===4) { if (request.status===200) { document.getElementById("createResult").innerHTML = request.responseText; } else { alert("发生错误:" + request.status); } } } } ``` # Ajax >其实原理很简单的。就是调用 XMLHttpRequest 对象来实现前端与后台的数据通信! #### 第一步:实例化 XMLHttpRequest 对象 ```js var request = new XMLHttpRequest(); ``` #### 第二步:调用 open() 方法 >open(Method[数据传输方法: POST \| GET ], URL , async[true(异步)\| false(同步)] ); ```js request.open("GET", "server.php?number=" + document.getElementById("keyword").value); ``` #### 第三步:调用 setRequestHeader >这里已经有人把 setRequestHeader 内容很详细的介绍一遍了,这里就不做太多的解释。[传送门](https://sjolzy.cn/XMLHTTP-methods-and-parameters-in-the-setRequestHeader.html) ```js request.open("GET", "server.php?number=" + document.getElementById("keyword").value); ``` #### 第四步:调用 send() 方法 > send方法接受一个参数,作为请求主体发送的数据。
##### 注意:如果没有参数,则必须填写 null
request.send(参数\|null) ##### 由于send的请求是同步的,请求得到服务器响应之后。响应的数据会自动填充XHR对象的属性 ```js console.log(request.responseText);//响应主体被返回的文本 console.log(request.responseXML);//与 responseText 以字符串返回 HTTP 响应不同,responseXML 以 XML 返回响应。ResponseXML 属性返回 XML 文档对象,可使用 W3C DOM 节点树的方法和属性来检查和解析该对象。 ``` ##### request.status >[Ajax status和statusText状态对照表](http://www.itxueyuan.org/view/6454.html)
>0:未初始化。尚未调用open()方法。
>1:启动。已调用open()方法,但尚未调用send()方法。
>2:发生。已调用send()方法,但尚未接收到响应。
>3:接受。已经接收到部分响应数据。
>4:完成。已经接收到响应数据,并且可以在客户端使用。
```js console.log(request.status);//响应的HTTP状态 console.log(request.statusText);//HTTP状态的说明 ``` #### 第五步:调用 onreadystatechange 事件处理程序 >##### request.onreadystatechange
    当请求被发送到服务器时,我们需要执行一些基于响应的任务。
    每当 readyState 改变时,就会触发 onreadystatechange 事件。
    readyState 属性存有 XMLHttpRequest 的状态信息。
如下所示:我们通过if语句判断 request.readyState 的响应数据,进行数据处理。 ```js request.onreadystatechange = function () { if (request.readyState === 4) { console.log(request.readyState); if (request.status === 200) { document.getElementById("createResult").innerHTML = request.responseText; } else { alert("发生错误:" + request.status); } } } ```