要完整实现一个Ajax同步调用和局部刷新,通常需要以下几个步骤:
1. 创建XMLHttpRequest对象,也就是创建一个异步调用对象
2.创建一个新的HTTP请求,并指定该HTTP请求的方法,URL
3.设置响应HTTP请求状态变化的函数
话不多说,代码伺候:
创建XMLHttpRequest对象:
// 封装通用的XMLHttpRequest对象 ,兼容各个版本
function createXHR(){
// 判断浏览器是否将XMLHttpRequest最为本地对象实现,正对IE7,firefox,opera等
if(typeof XMLHttpRequest != 'undefine'){
// code for IE7+, Firefox, Chrome, Opera, Safari
return new XMLHttpRequest();
}else if(typeof ActiveXObject != 'undefine'){
// code for IE6,IE5...
var xmlArr = ['Microsoft.XMLHTTP','MSXML2.XMLHTTP.6.0','MSXML2.XMLHTTP.5.0','MSXML2.XMLHTTP.4.0','MSXML2.XMLHTTP.3.0','MSXML2.XMLHTTP.2.0'];
var len = xmlArr.length, xhr;
for(var i=0;i<len;i++){
try{
// 创建XMLHttpRequest对象
xhr = new ActiveXObject(xmlArr[i]);
break;
}catch(ex){
}
}
return xhr;
}else{
throw new Error('No XHR Ojbect available.');
}
}
也可以简写:
function crateXHR(){
var xmlHttp;
if(windown.XMLHttpRequest){
//code for IE7+, Firefox, Chrome,Opera, Safari
xmlHttp = new XMLHttpRequest();
}else{
// code for IE6, IE5
xmlHttp = new ActiveXObject('Microsoft.XMLHttp');
}
}
完整代码:
<html>
<head>
<title>ajax</title>
</head>
<body>
<div id="banner" class="banner">
</div>
<script type="text/javascript">
// 封装通用的XMLHttpRequest对象 ,兼容各个版本
function createXHR(){
// 判断浏览器是否将XMLHttpRequest最为本地对象实现,正对IE7,firefox,opera等
if(typeof XMLHttpRequest != 'undefine'){
// code for IE7+, Firefox, Chrome, Opera, Safari
return new XMLHttpRequest();
}else if(typeof ActiveXObject != 'undefine'){
// code for IE6,IE5...
var xmlArr = ['Microsoft.XMLHTTP','MSXML2.XMLHTTP.6.0','MSXML2.XMLHTTP.5.0','MSXML2.XMLHTTP.4.0','MSXML2.XMLHTTP.3.0','MSXML2.XMLHTTP.2.0'];
var len = xmlArr.length, xhr;
for(var i=0;i<len;i++){
try{
// 创建XMLHttpRequest对象
xhr = new ActiveXObject(xmlArr[i]);
break;
}catch(ex){
}
}
return xhr;
}else{
throw new Error('No XHR Ojbect available.');
}
}
// XMLHTTPRequest对象
var xhr = createXHR(), data =null;
// 响应XMLHttpRequest对象状态变化的函数,onreadystatechange在readstatechagne属性发生改变时触发
xhr.onreadystatechange = function(){
if(xhr.readystate==4){
if((xhr.status>=200 && xhr.status<300) || xhr.status === 304){
// 获得服务器返回的数据
// console.log(xhr.responseText);
// responseText返回的数据是string类型
// data = eval("("+xhr.responseText+")");
data = JSON.parse(xhr.responseText)
// 渲染数据到页面
renderDataToDom();
}
}
}
// 创建请求
// open(method,url,async)方法有三个参数
// method 请求方式,url 要请求的文件在服务器上的位置 async 请求是同步还是异步
xhr.open('get','./server.json',true);
// 发送请求
xhr.send(null);
// xhr.send({user:'zhangsan',id:6})
// 设置http头部信息
// xhr.setRequestHeader('Content-type','application/x-www-form-urlencoded');
function renderDataToDom(){
}
</script>
</body>
</html>