zoukankan      html  css  js  c++  java
  • 封装原生js的Ajax方法

    封装好的函数

    //创建一个ajax对象
    function createXHR(){
        if(typeof window.XMLHttpRequest != 'undefined'){
            return new XMLHttpRequest();
        }else{
            return new ActiveXObject('MicroSoft.XMLHTTP');
        }
    }
    //数据转换函数
    function transform(data){
        //创建一个空的数组
        var attr = [];
        //把数据转码后push到数组中
        for(var i in data){
            attr.push(encodeURIComponent(i)+'='+encodeURIComponent(data[i]));
        }
        //用join方法把数组拆开以&符号分割
        return attr.join('&');
    }
    function ajax(data){
        //创建一个ajax对象
        var xhr = createXHR();
        //给地址添加随机数作用是保证每次调用的都是不同的链接
        data.url = data.url+'?rand='+Math.random();
        //进行数据的转换‘ask码’
        data.data = transform(data.data);
        //如果为get请求那么附带的参数必须添加带链接的尾部
        if(data.mode == 'get'){
            //判断url中是否存在‘?’号如果存在则后结尾为&符号如果不存在则结尾添加符号为?
            data.url += data.url.indexOf('?') == -1 ? '?'+data.data : '&'+data.data;
        }
        //如果是一部加载的话那么必须验证readyState的状态4为完成
        if(data.ync == true){
            xhr.onreadystatechange = function(){
                if(xhr.readyState == 4){
                    callBank();
                }
            }
        }
        //传入地址,获取方法,同步异步
        xhr.open(data.mode,data.url,data.ync);
        //如果为post请求方式那么传入的参数必须添加到
        if(data.mode == 'post'){
            //因为post请求默认是要要form表单中才能使用的现在有个方法就是模拟表单来是用
            xhr.setRequestHeader('Content-Type','applation/x-www-form-urlencoded');
            //把参数传入到send里边
            xhr.send(data.data);
        }else{
            xhr.send(null);
        }
        //如果是同步方法的话那么就直接判断状态是否是200
        if(data.ync == false){
            callBank();
        }
        function callBank(){
            //如果相应状态是200的话执行
            if(xhr.status == 200){
                //利用回调传参的原理把获取到的内容传入在外面就可以直接使用
                data.success(xhr.responseText);
            }
        }
    }
    Ajax代码

    调用方法

    ajax({
        url:'地址',
        mode:'get',     //调用方法get或者是post
        ync:true,       //同步为false异步为true
        data:{
            'name':'Bob-佳杰',
            'age':24
        },
        success:function(data){
            alert(data)
        }
    });
  • 相关阅读:
    GDI+之图形缩放之画蛇添足
    Could not load type 'Microsoft.Expression.DesignModel.Core.ISharedInstanceBuilder'
    Win7自带显示驱动在Thinkpad T400中的异常:Display Driver Stopped Responding and Has Recovered
    Silverlight5.0中,ImageBrush不再支持TileMode属性
    GDI+中启动双缓存后缩放失效的问题
    Result of Transforming XML by XSLT in Different Browsers
    Difference of Getting DOM ElementsM Between IE6 & FF2
    项目进入R1 Preview,总算可以偷着乐会了
    原来mod_cache是需要代理的
    在Fedora11上安装Chrome
  • 原文地址:https://www.cnblogs.com/BobSky/p/3110642.html
Copyright © 2011-2022 走看看