码迷,mamicode.com
首页 > Web开发 > 详细

ajax请求详解

时间:2016-09-23 13:00:15      阅读:135      评论:0      收藏:0      [点我收藏+]

标签:

//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);
}

 

ajax请求详解

标签:

原文地址:http://www.cnblogs.com/weixiaoba/p/5899476.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!