ajax 續3 比較好的對ajax的get和post進行封裝和實現回調

思想:

續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);

    }

}

運行結果:



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章