zoukankan      html  css  js  c++  java
  • 关于ajax网络请求的封装

    // 封装的ajax网络请求函数
    // obj 是一个对象
    function AJAX(obj){


            //跨域请求
            if (obj.dataType == "jsonp") {
                //在这里 callback 必须是全局变量 保证函数消失的时候 这个变量不可以被销毁

                //处理一下函数名(防止多个网络请求 函数名字相同 出现紊乱的情况)
                var hehe = "callBack" + "_" + new Date().getTime() + "_" + String(Math.random()).replace(".","");
                window[hehe] = obj.success;
                //创建 script标签
                var sc = document.createElement("script");
                sc.src = obj.url + "?" + "cb=" + hehe;
                console.log(sc.src);
                document.body.appendChild(sc);
                document.body.removeChild(sc);
                return;
            }

    //1、创建 ajax 对象
        var ajaxObj = null;
        if (window.XMLHttpRequest) {
            ajaxObj = new XMLHttpRequest();
        }else{
            ajaxObj = new ActiveXObject("Microsoft.XMLHTTP");
        }


        //设置请求的类型
        obj.type = obj.type.toUpperCase() || "GET";

        //如果是get请求 并且需要传递参数 则需要给 url 后面拼接参数
        if (obj.type == "GET") {
            var arr = [];//定义数组 用于把对象存储到数据里面
            for (var key in obj.data) {
                arr.push(key +"="+ obj.data[key]);
            }
            //用&分隔数组 让其转化为类似:name=lxl&age=18 的形式
            var str = arr.join("&");
            obj.url = obj.url +"?"+ str;
            //拨号
            ajaxObj.open(obj.type,obj.url,true);


            //发送"name=123&age=18"
            ajaxObj.send();
        }else{
            var arr = [];//定义数组 用于把对象存储到数据里面
            for (var key in obj.data) {
                arr.push(key +"="+ obj.data[key]);
                //console.log(arr);
            }
            //用&分隔数组 让其转化为类似:name=lxl&age=18 的形式
            var str = arr.join("&");
            //console.log(str);
            ajaxObj.open(obj.type,obj.url,true);
            ajaxObj.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
            ajaxObj.send(str);
        }



        //监听
        ajaxObj.onreadystatechange = function(){

            if (ajaxObj.readyState == 4) {
                if (ajaxObj.status >= 200 && ajaxObj.status < 300 || ajaxObj.status == 304) {
                    //请求成功
                    obj.success(ajaxObj.responseText);
                }else{
                    //请求失败
                    obj.error(ajaxObj.status);
                }
            }

        }

    }

    下面是我的公众号,大家可以关注一下,可以一起学习,一起进步:

  • 相关阅读:
    SPOJ GSS4 Can you answer these queries IV ——树状数组 并查集
    SPOJ GSS3 Can you answer these queries III ——线段树
    SPOJ GSS2 Can you answer these queries II ——线段树
    SPOJ GSS1 Can you answer these queries I ——线段树
    BZOJ 2178 圆的面积并 ——Simpson积分
    SPOJ CIRU The area of the union of circles ——Simpson积分
    HDU 1724 Ellipse ——Simpson积分
    HDU 1071 The area ——微积分
    HDU 4609 3-idiots ——FFT
    BZOJ 2194 快速傅立叶之二 ——FFT
  • 原文地址:https://www.cnblogs.com/lxl0419/p/5668209.html
Copyright © 2011-2022 走看看