什么是ajax:
通过在后台与服务器进行少量的数据交换,ajax可以使网页实现异步更新,这就意味着可以在不重新加载整个网页的情况下,对网页的某部分进行更新
ajax工作原理:
XMLHttpRequest | 用于在后台与服务器交换数据,这意味着可以在不重新加载整个网页的情况下,对网页的某部分进行更新 |
ActiveX | 老版本的IE使用Active对象 |
open(method,url,async) | method规定请求类型,url文件在服务器上的地址,async是否异步 |
send(string) | 将请求发送到服务器,string(要发送的内容)仅用于post请求 |
setRequestHeader(header,value) | 想请求添加HTTP头【header请求头的名称,value请求头的值】 |
onreadystatechange () | |
readyState | 0:请求未初始化,1:服务器连接已建立,2:请求已接收,3:请求处理中,4:请求已完成,且响应就绪 |
status | 200:“ok”,404:未找到页面 |
responseText | 获得字符串形式的响应数据【如果来自服务器的相应并非xml】 |
responseXML | 获得xml形式的响应数据 |
GET和POST请求的比较:
1.get请求更简单也更快,并且在大部分情况下都能够使用
2.在以下情况下请使用post请求:
无法使用缓存文件(更新服务器上的文件或数据库)
向服务器发送大量数据(post没有数据数量的限制)
发送包含未知字符的用户输入时,post比get更稳定也更加可靠
-----------------------------------------------------------------------------------------------------------------------------
get请求注意事项:
例如:
var ajax = new XMLHttpRequest();
ajax.open("GET","demo.json",true);
ajax.send();
这种情况下你可能请求到的是缓存数据
为避免这种情况,向url中添加一个唯一的id
ajax.open("GET","demo.json?t="+Math.random(),true);
--------------------------------------------------------------------------------------------------------------------------------------------------------------------
post请求注意事项:
如果需要像html表单那样post数据,请使用setRequesHeader()来添加HTTP头部,然后在send方法中规定希望发送的数据
例如:
var ajax = new XMLHttpRequest();
ajax.open("post","test.json",true);
ajax.setRequestHeader("Content-type","application/x-www-form-urlencoded");
ajax.send("username=zhangsan&psd=123");
---------------------------------------------------------------------------------------------------------------------------------------------------------------------
关于async使用true还是false的问题:
XMLHttpRequest对象如果要用于ajax的话,其open方法的async参数必须设置为true
发送异步请求,通过ajax,javascript无需等待服务器响应,可以执行其它脚本,当响应就绪后在对响应进行处理
------------------------------------------------------------------------------------------------------------------------------------------------------------
完整示例:
var ajax = new XMLHttpRequest():
ajax.open("GET","test.json?id="+Math.random(),true);
ajax.send();
ajax.onreadystatechange = function(){
if(ajax.readyState==4&&ajax.status==200){
//请求成功时返回数据jax.responseText
console.log(ajax.responseText);
}
}