什么是Ajax
AJAX(Asynchronous javascript and xml)用JavaScript 以异步的形式操作 xml (现在操作的是json)
- Web的传统模型。客户端向服务器发送一个请求,服务器返回整个页面,如此反复
form表单传输数据的方式就属于传统的web模型,当我们提交数据后会刷新整个页面,在新的页面中返回内容。
form表单有三个很重要的属性,分别是
-
method:规定发送数据的http方式,一般是get或者post
-
action:要把数据传送到的地址
-
enctype:规定在发送表单数据之前如何对其进行编码
-
enctype的默认值是 “application/x-www-form-urlencoded”,即在发送前编码所有字符,这个属性值即使我们不写也是默认这个的。
multipart/form-data (<input type='file'>) 不对字符编码。在使用包含文件上传控件的表单时,必须使用该值
- AJAX模型中,数据在客户端与服务器之间独立传输,服务器不再返回整个页面。(异步局部地获取数据,大大改善了Form表单的缺点)
Ajax重要的两个对象
new XMLHttpRequest() 和new ActiveXObject('Microsoft.XMLHttp') 一般的主流浏览器支持第一个方法,IE6以下用第二个方法。
对象的方法
方法 | 描述 |
abort | 停止当前的请求 |
getAllResponseHeaders | 把http请求的所有响应首部最为键/值返回 |
getResponseHeaders(‘headerLabel’) | 返回指定首部的串值 |
open(‘method’, ‘url’, ‘true’) |
建立对服务器的调用,method参数可以是get、post或者put。 url参数可以是相对url或者绝对url, 第三个参数是选择异步还是同步,异步是true。 这个方法还包括三个可选参数。 |
send(string) | 向服务器发送请求 string:仅用于 POST 请求 |
setRequestHeader(‘header’, ‘value’) |
向请求添加 HTTP 头。之前必须调用open方法 header: 规定头的名称 value: 规定头的值 |
对象的属性
属性 | 描述 |
onreadystatechange | 状态改变触发器 |
readyState | 对象的状态,状态值
0代表未初始化,未调用send()方法 1代表读取中,已调用send(),正在发送请求 2代表已读取,send方法执行完成,接收到全部响应内容 3代表交互中,正在解析响应内容 4代表完成,响应内容解析完成 |
responseText |
获得字符串形式的响应数据 |
responseXML |
获得XML形式的响应数据 |
status |
服务器返回的状态码,如:404 = “文件未找到”、200 = “成功” 500 = “服务器内部错误” 304=“资源未被修改” |
statusText |
服务器返回的状态文本信息 |
AJAX创建流程
1.生成一个ajax对象
2.通过ajax对象 open(method,url,flag)方法初始化请求;
3.通过ajax对象 send发送数据
4.通过ajax对象的onreadystatechange来监听状态改变,当数据请求成功之后就可以操作数据了(readyState == 4&&status==200)
下面封装一个属于自己的ajax
1 function ajax(method, url, callback, data, flag) { 2 var xhr = null; 3 if(window.XMLHttpRequest) { 4 xhr = new XMLHttpRequest(); 5 }else { 6 xhr = new ActiveXObject('Microsoft.XMLHttp') 7 } 8 xhr.onreadystatechange = function() { 9 if(xhr.readyState == 4) { 10 if(xhr.status == 200) { 11 callback(xhr.responseText); 12 }else { 13 console.log('error'); 14 } 15 } 16 } 17 method = method.toUpperCase(); 18 if(method == 'GET') { 19 var date = new Date(), 20 timer = date.getTime(); 21 xhr.open(method, url + '?' + data + '&timer=' + timer, flag); 22 xhr.send(); 23 }else if(method == 'POST') { 24 xhr.open(method, url, flag); 25 xhr.setRequestHeader('Content-type','application/x-www-form-urlencoded'); 26 xhr.send(data); 27 } 28 }