ajax 续3 比较好的对ajax的get和post进行封装和实现回调

本文介绍了一种使用Map封装的AJAX请求方法,包括get和post两种方式,通过接收Map参数简化了数据传递过程,并实现了成功和失败的回调处理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

思想:

续2的代码,封装的也算是可以,

但要求参数必须要顺序出的出现:能否给一部分数据,不用null占位:

       思想就是接收Object即Map:

添加一个get方法,url请求地址,succ是成功以后的回调,falure是失败以后的回调

 直接接受一个map={url:url,succ:suc,falure:fal,xtype:text}

 添加post方法,{url:url,param:{name:Jack,age:90},succ:suc,failure:fal,xtype:text}

jsp页面使用时传递是一个map,在js中map就是一个Object

var ajax = newAjax();

         // var url ="<c:url value='/xml/a.txt'/>";

         // var url ="<c:url value='/xml/aa.json'/>";

        // var url = "<c:urlvalue='/xml/a.txt'/>";

         var url = "<c:urlvalue='/JSONServlet'/>";

         ajax.post(

                 {

                    url:url,

                    succ:function(data){

                           alert("成功了"+data);

                           // alert(data.length);

                          // alert(data.getElementsByTagName("user").length);                          这是一个map,同时也是一个对象

                     },

                     failure:function(status){

                         alert("没有成功.."+status);

                     },

                     xtype:"text",

                     param:'name='

                 }

         );



1.xhr.js

//声明一个方法

function Ajax() {

    // 实例化xhr对象

    var xhr = null;

    if (window.XMLHttpRequest){

        xhr= newXMLHttpRequest();

    }else{

        xhr= newActiveXObject("Microsoft.XMLHttp");

    }

    // 添加一个get方法,url请求地址,succ是成功以后的回调,falure是失败以后的回调

    // 直接接受一个map={url:url,succ:suc,falure:fal,xtype:text}

    this.get = function(obj) {

        if (!obj.url) {// 如果没有URL则直接返回

            return;

        }

        xhr.open("GET", obj.url, true);

        // 设置回调

        xhr.onreadystatechange= function(){

            if (xhr.readyState == 4) {

                if (xhr.status == 200) {

                   if (obj.succ) {

                       // 判断succ是否是一个函数

                       if (typeof (obj.succ) == "function"){

                           // 获取数据,判断返回类型

                           var res = null;

                           if (!obj.xtype || obj.xtype == "text") {

                               res= xhr.responseText;

                           }elseif(obj.xtype == "json") {

                               res= xhr.responseText;

                               res= eval("("+ res + ")");

                           }elseif(obj.xtype == "xml") {

                               res= xhr.responseXML;

                           }

                           obj.succ(res);

                       }

                   }

                }else{

                   if (obj.failure) {

                       if (typeof (obj.failure) == "function"){

                           // 返回错误的状态码

                           obj.failure(xhr.status);

                       }

                   }

                }

            }

        };

        // 发送请求

        xhr.send(null);

    };

    // 添加post方法,{url:url,param:{name:Jack,age:90},succ:suc,failure:fal,xtype:text}

    this.post = function(obj) {

        if (!obj.url) {// 如果没有url直接返回

            return;

        }

        xhr.open("POST", obj.url, true);

        xhr.setRequestHeader("Content-type",

                "application/x-www-form-urlencoded");

        xhr.onreadystatechange= function(){

            if (xhr.readyState == 4) {

                if (xhr.status == 200) {

                   if (obj.succ) {

                       var res = xhr.responseText;

                       if (obj.xtype == "json") {

                           res= eval("("+ res + ")");

                       }elseif(obj.xtype == "xml"){

                           res= xhr.responseXML;

                       }

                       if (typeof (obj.succ) == "function"){

                           obj.succ(res);

                       }

                   }

                }else{

                   if (typeof (obj.failure) == "function"){

                       obj.failure(xhr.status);

                   }

                }

            }

        };

        if (obj.param) {

            xhr.send(obj.param);

        }else{

            xhr.send("");

        }

    };

}


2.xhr.jsp

<script type="text/javascript" src="<c:url value='/js/xhr2.js'/>"></script>

</head>

<body>

  <button onclick="_one();">get</button>

  <button onclick="_two();">post</button>

</body>

<script type="text/javascript">

  function_one(){

     //声明ajax对象

     var ajax = newAjax();

     // var url ="<c:url value='/xml/a.txt'/>";

     // var url ="<c:url value='/xml/aa.json'/>";

     //  var url = "<c:urlvalue='/xml/a.xml'/>";

     var url = "<c:urlvalue='/JSONServlet'/>";

     ajax.get(

             {

                 url:url,

                 succ:function(data){

                       //alert("成功了"+data);

                       // alert(data.length);

                       alert(data.getElementsByTagName("user").length);

                 },

                 failure:function(status){

                     alert("没有成功.."+status);

                 },

                 xtype:"json"

             }

     );

  };

  function_two(){

         //声明ajax对象

         var ajax = newAjax();

         // var url ="<c:url value='/xml/a.txt'/>";

         // var url ="<c:url value='/xml/aa.json'/>";

        // var url = "<c:urlvalue='/xml/a.txt'/>";

         var url = "<c:urlvalue='/JSONServlet'/>";

         ajax.post(

                 {

                    url:url,

                    succ:function(data){

                           alert("成功了"+data);

                           // alert(data.length);

                          // alert(data.getElementsByTagName("user").length);

                     },

                     failure:function(status){

                         alert("没有成功.."+status);

                     },

                     xtype:"text",

                     param:'name='

                 }

         );

       };

</script>

</html>

3.当xhr2.jsp访问servlet时:

public classJSONServlet extends HttpServlet {

    public voiddoGet(HttpServletRequest request, HttpServletResponse response)

            throws ServletException,IOException {

        System.err.println("get.............");

        Randomr = newRandom();

        int a = r.nextInt(30);

        List<User>us = newArrayList<User>();

        for (int i = 0; i < a; i++) {

            us.add(new User("U" + i, "张三" + i, i));

        }

        // 2:设置返回text/html

        response.setContentType("text/html;charset=UTF-8");

        //3:转成json

        Stringstr = JSONArray.toJSONString(us);

        response.getWriter().print(str);

    }

    public voiddoPost(HttpServletRequest request, HttpServletResponse response)

            throws ServletException,IOException {

        request.setCharacterEncoding("UTF-8");

        Stringname = request.getParameter("name");

        System.err.println("post............."+name);

       

       

        Randomr = newRandom();

        int a = r.nextInt(30);

        List<User>us = newArrayList<User>();

        for (int i = 0; i < a; i++) {

            us.add(new User("U" + i, "张三" + i, i));

        }

        // 2:设置返回text/html

        response.setContentType("text/html;charset=UTF-8");

        //3:转成json

        Stringstr = JSONArray.toJSONString(us);

        response.getWriter().print(str);

    }

}

运行结果:



内容概要:该研究通过在黑龙江省某示范村进行24小时实地测试,比较了燃煤炉具与自动/手动进料生物质炉具的污染物排放特征。结果显示,生物质炉具相比燃煤炉具显著降低了PM2.5、COSO2的排放(自动进料分别降低41.2%、54.3%、40.0%;手动进料降低35.3%、22.1%、20.0%),但NOx排放未降低甚至有所增加。研究还发现,经济性便利性是影响生物质炉具推广的重要因素。该研究不仅提供了实际排放数据支持,还通过Python代码详细复现了排放特征比较、减排效果计算结果可视化,进一步探讨了燃料性质、动态排放特征、碳平衡计算以及政策建议。 适合人群:从事环境科学研究的学者、政府环保部门工作人员、能源政策制定者、关注农村能源转型的社会人士。 使用场景及目标:①评估生物质炉具在农村地区的推广潜力;②为政策制定者提供科学依据,优化补贴政策;③帮助研究人员深入了解生物质炉具的排放特征技术改进方向;④为企业研发更高效的生物质炉具提供参考。 其他说明:该研究通过大量数据分析模拟,揭示了生物质炉具在实际应用中的优点挑战,特别是NOx排放增加的问题。研究还提出了多项具体的技术改进方向政策建议,如优化进料方式、提高热效率、建设本地颗粒厂等,为生物质炉具的广泛推广提供了可行路径。此外,研究还开发了一个智能政策建议生成系统,可以根据不同地区的特征定制化生成政策建议,为农村能源转型提供了有力支持。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值