标签:
//1. 创建一个ajax对象 //var xhr=new XMLHttpRequest; //var xhr=null; //try{ // if(window.XMLHttpRequest){ // xhr=new XMLHttpRequest; // }else if(new ActiveXObject("Microsoft.XMLHTTP")){ // xhr=new ActiveXObject("Microsoft.XMLHTTP"); // }else if(new ActiveXObject("Msxm12.XMLHTTP")){ // xhr=new ActiveXObject("Msxm12.XMLHTTP"); // }else if(new ActiveXObject("Msxm13.XMLHTTP")){ // xhr=new ActiveXObject("Msxm13.XMLHTTP"); // } // //}catch(e){ // throw new Error("您当前浏览器不支持AJAX~ 破电脑砸了吧!!!"); //} //第一次升级v //惰性思想:在自执行函数执行之后我们把getXHR赋值为一个具体的函数,这样以后执行这个方法时,就不用在判断是什么浏览器了 //var getXHR=null; //-function(){ // var list=[function(){ // return new XMLHttpRequest; // },function(){ // return new ActiveXObject("Microsoft.XMLHTTP"); // },function(){ // return new ActiveXObject("Msxm12.XMLHTTP"); // },function(){ // return new ActiveXObject("Msxm13.XMLHTTP"); // }]; // var temp=null; // for(var i=0;i<list.length;i++){ // try{ // temp=list[i](); // }catch(e){ // continue; // } // getXHR=list[i]; // break; // } // if(!temp){ // throw new Error("您当前浏览器不支持AJAX~ 破电脑砸了吧!!!"); // } //}(); var getXHR=function(){ var list=[function(){ return new XMLHttpRequest; },function(){ return new ActiveXObject("Microsoft.XMLHTTP"); },function(){ return new ActiveXObject("Msxm12.XMLHTTP"); },function(){ return new ActiveXObject("Msxm13.XMLHTTP"); }]; var temp=null; for(var i=0;i<list.length;i++){ try{ temp=list[i](); }catch(e){ continue } getXHR=list[i]; break } if(!temp){ throw new Error("您当前浏览器不支持AJAX~ 破电脑砸了吧!!!"); } return temp }; var xhr=getXHR(); //2. 打开一个URL地址(服务器给我们的数据请求的一个接口API) //第一个参数请求方式get post put delete // get: 一般用来向服务器发送一个请求,从服务器获取内容 // post:一般应用于客服端给服务器推送大量的内容 // get 通过URL请求向服务器传参数,并在?的后面拼上需要传的参数 // post 通过xhr.send(字符串) //xhr.send(‘{"name":"xiaoming","age":12}‘); // 长度:get通过URL传参数,但是浏览器对于URL的大小是有限制的(一般谷歌8KB 火狐7KB IE2KB), // 一旦超出浏览器会自动减去,这样传给后台的数据就不完整了,这种情况只能用post // 安全:get通过URL传参数可以在控制台看见,安全性不高 post 是把传递的内容放在HTTP主题中 在控制台看不到 安全性更高 // 缓存问题:post请求浏览器不会默认记录缓存信息,也不需要清除缓存 // get请求浏览器会默认记录缓存信息,一般我们会在URL拼接参数的时候给他一个时间戳或者随机数,这样每次请求的地址就会不一样(不一样就不缓存) var time=new Date(); var times=time.getTime(); console.log(times); var url="http://www.com.qq.com"; var code=Math.random(); var strCode=url.indexOf("?")>-1?url+"time="+times:url+"?time="+times; console.log(strCode); //3. 监听数据请求 //xhr.readyState:ajax请求状态码 //0 未发送请求 1 已打开连接 2 已获取响应头部信息 3 请求的数据内容正在加载 4 请求完成得到数据 //xhr.status:网络状态码 //200 一般以2开头 正常 404 找不到 文件,图片...不存在 502 服务器错误 xhr.onreadystatechange=function(){ if(xhr.readyState===4&&/^2\d{2}$/.test(xhr.status)){ var str=xhr.responseText; //接收后台返回来的JSON字符串 } }; xhr.send(null); function Ajax(url,callback){ var xhr=getXHR(); url+=url.indexOf("?")>-1?"time="+(new Date).getTime():"?time="+(new Date).getTime(); xhr.open("get",url,true);//同步false 异步true xhr.onreadystatechange=function(){ if(xhr.readyState===4&&/^2\d{2}$/.test(xhr.status)){ var str=xhr.responseText; str="JSON" in window?JSON.parse(str):eval("("+str+")"); callback(str); } } xhr.send(null); }
标签:
原文地址:http://www.cnblogs.com/weixiaoba/p/5899476.html