什么是 AJAX ?
AJAX = 异步 JavaScript 和 XML。
AJAX 是一种用于创建快速动态网页的技术。
通过在后台与服务器进行少量数据交换,AJAX 可以使网页实现异步更新。这意味着可以在不重新加载整个网页的情况下,对网页的某部分进行更新。
传统的网页(不使用 AJAX)如果需要更新内容,必需重载整个网页面。
有很多使用 AJAX 的应用程序案例:新浪微博、Google 地图、开心网等等。
XMLHttpRequest 对象
所有现代浏览器均支持 XMLHttpRequest 对象(IE5 和 IE6 使用 ActiveXObject)。所有现代浏览器(IE7+、Firefox、Chrome、Safari 以及 Opera)均内建 XMLHttpRequest 对象。
XMLHttpRequest 用于在后台与服务器交换数据。这意味着可以在不重新加载整个网页的情况下,对网页的某部分进行更新.。
向服务器发送请求
如需将请求发送到服务器,我们使用 XMLHttpRequest 对象的 open() 和 send() 方法:
get还是post?
与 POST 相比,GET 更简单也更快,并且在大部分情况下都能用。
然而,在以下情况中,请使用 POST 请求:
- 无法使用缓存文件(更新服务器上的文件或数据库)
- 向服务器发送大量数据(POST 没有数据量限制)
- 发送包含未知字符的用户输入时,POST 比 GET 更稳定也更可靠
XMLHttpRequest 对象如果要用于 AJAX 的话,其 open() 方法的 async 参数必须设置为 true.
服务器响应
如需获得来自服务器的响应,请使用 XMLHttpRequest 对象的 responseText 或 responseXML 属性。
onreadystatechange 事件
当请求被发送到服务器时,我们需要执行一些基于响应的任务。
每当 readyState 改变时,就会触发 onreadystatechange 事件。
readyState 属性存有 XMLHttpRequest 的状态信息。
下面是 XMLHttpRequest 对象的三个重要的属性:
注意:
当 readyState 等于 4 且状态为 200 时,表示响应已就绪。
onreadystatechange 事件被触发 5 次(0 - 4),对应着 readyState 的每个变化。
示例一:原生Ajax
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title></title>
<script>
window.onload=function(){
var oBtn=document.getElementById("btn1");
oBtn.onclick=function(){
//1.创建ajax对象
var xhr=null;
//方式1
if(window.XMLHttpRequest){ //IE7+, Firefox, Chrome, Opera, Safari
xhr = new XMLHttpRequest();
} else { //IE6, IE5
xhr = new ActiveXObject("Microsoft.XMLHTTP")
}
//方式2
try{
xhr = new XMLHttpRequest();
}catch(e){
xhr = new ActiveXObject("Microsoft.XMLHTTP")
}
//2.连接服务器 open(方法,url,是否异步:true为异步,false为同步)
xhr.open('GET','1.txt',true); //注意:路径也可以是../1.txt
//3.发送请求
xhr.send();
//4.接收服务器的返回值
xhr.onreadystatechange=function(){
if(xhr.readyState==4){
if(xhr.status==200) {
alert(xhr.responseText)
}
else{
alert("读取失败")
}
}
}
}
}
</script>
</head>
<body>
<input id="btn1" type="button" value="查看"/>
</body>
</html>
示例二:获取新闻标题和事件
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title></title>
<script src="js/JSON.js"></script>
<script type="text/javascript">
window.onload=function(){
var oInput=document.getElementById("input1");
oInput.onclick=function(){
var xhr=null
if(window.XMLHttpRequest){ //IE7,Firefox, Chrome, Opera, Safari
xhr=new XMLHttpRequest();
}else{ //IE6,IE5
xhr=new ActiveXObject("Microsoft.XMLHTTP")
}
xhr.open("GET","news.php",true);
xhr.send();
xhr.onreadystatechange=function(){
if(xhr.readyState==4){
if(xhr.status==200){
var data=JSON.parse(xhr.responseText); //JSON.parse方法用于将一个 JSON 字符串转换为对象。
// alert("chengg"+data[0].title)
var oUl=document.getElementById("ul1");
var html=""
for(var i=0;i<data.length;i++){
html+='<li>'+data[i].title+"-"+data[i].date+'</li>'
}
oUl.innerHTML=html;
}else{
alert("获取失败"+xhr.status)
}
}
}
}
}
</script>
</head>
<body>
<input type="button" id="input1" value="今日新闻" />
<ul id="ul1"></ul>
</body>
</html>