XHR详细讨论
2015-01-28
返回类型:
XMLHttpRequest 的详细属性
responseText:????服务器相应的主体信息,即http的body信息
responseXML: 对于大量的格式化文档,可以用XML来传输或交换,由后台程序把数据封装在XML文档中,js接收XML对象并解析
status:????服务器返回的状态码,例:200,成功
statusText: 服务器返回的状态码对应的文字描述,例如 200 ,OK中的OK
readyState: XMLHttpRequest 对象的自身状态码0-4
onreadystatechange: 事件属性绑定,当XMLHttpRequest对象的状态码发生变化是,激发的函数
?
HTTP的头信息的获取:
利用getResponseHeader(); 或者 getAllResponseHeaders(); 来获取
参数: 类型:‘Content-Type‘,‘Date‘,‘Vary‘ 的等返回信息的值
注意:服务器集群时:
????Vary 指缓存时应该判断后面的因素
?
XMLHttpRequest 的详细方法:
open("请求方式",url,同步/异步);????????
send(null/参数) 参数写法:k1=v1&k2=v2&kn=vn
setRequestHeader(key,value);????????//设置请求头信息
Abort() 忽略,不要再进行下去,到此为止
getResponseHeader(): 获取响应的某个头信息
getAllResponseHeaders(): 获取响应的所有头信息
异步原理
状态值
- XHR对象刚被创建时
- open后为1,此时已经建立连接成功
- 接收头信息完毕后为2
- ?
- 结束,断开连接后为4
ajax使用单线程实时插队的方法,没有使用多线程
异步不阻塞原理
?
?
Ajax实现无刷新页面注册:
script中代码:
function ajaxreg(){ //步骤1:收集表单的数据 ????//步骤2:打开到后台服务器连接(POST连接) ????//步骤3:发送数据 ????//步骤4:监听,回调等 ????//1.制造XHR ????var xhr = createXHR(); ????//2.打开POST连接 ????xhr.open(‘POST‘,‘./AjaxReg.PHP‘,true); ????//4.绑定 ????xhr.onreadystatechange = function(){ ????????if(this.readyState == 4) ????????????alert(this.responseText); ????} ????//3.收集表单数据 ????var un= document.getElementsByName(‘username‘)[0].value; ????var em= document.getElementsByName(‘email‘)[0].value; ????//4.send ????//alert("username="+un+"&email="+em); ????xhr.setRequestHeader(‘Content-Type‘,‘application/x-www-form-urlencoded‘);????????//POST 必须加上这一句 ????xhr.send("username="+un+"&email="+em); ????return false; } |
?
html代码:
<h1>ajax注册</h1> <div id="regres"></div> <form action="AjaxReg.php" method="post" target="regzone" onsubmit="return ajaxreg();"> ????<p>用户名:<input type="text" name="username" /></p> ????<p>邮件地址:<input type="text" name="email" /></p> ????<p><input type="submit" name="注册" /></p> </form> |
?
AjaxReg.PHP代码
<?php
print_r($_POST);
?>
?
?
?
?