zoukankan      html  css  js  c++  java
  • Ajax的封装。

    封装 Ajax

    因为Ajax 使用起来比较麻烦,主要就是参数问题,比如到底使用GET 还是POST;到

    底是使用同步还是异步等等,我们需要封装一个Ajax 函数,来方便我们调用。

       封装支持接收来自服务端的数据,不可以发送数据到服务端

    /**
    
    * 此封装只支持接收来自服务端的数据,不可以发送数据到服务端
    
     */
    
    function ajax(obj) {
    
        var xhr = new XMLHttpRequest();
    
        obj.url = obj.url + '?rand=' + Math.random();
    
        xhr.open(obj.method, obj.url, obj.async);
    
        xhr.send(null);
    
        if (obj.async === false) {
    
            callback();
    
        }
    
        if (obj.async === true) {
    
            xhr.onreadystatechange = function () {
    
                if (xhr.readyState == 4) {
    
                    callback();
    
                }
    
            };
    
        }
    
        function callback () {
    
            if (xhr.status == 200) {
    
                obj.success(xhr.responseText); //回调
    
            } else {
    
                alert('数据返回失败!状态代码:' + xhr.status + ',状态信息:' + xhr.statusText);
    
            }
    
        }
    
    }
    

      

       把上面的代码封装在ajax2.js中,在页面上引入该文件。

    <!DOCTYPE html>
    
    <html>
    
    <head>
    
        <title>Ajax的封装</title>
    
        <meta charset="utf-8">
    
        <script src="ajax2.js"></script>
    
    </head>
    
    <body>
    
    <button id="btn">调用Ajax</button>
    
    <script>
    
        document.getElementById("btn").onclick=function(){
    
            ajax({
    
                method : 'get',
    
                url : 'http://localhost:3000/api/2',
    
                success : function (text) {
    
                    alert(text);
    
                },
    
                async :false
    
            });
    
        };
    
    </script>
    
    </body>
    
    </html>
    
    7.2  封装支持接收来自服务端的数据,又可以发送数据到服务端
    
    function ajax(obj) {
    
        var xhr = new XMLHttpRequest();
    
        obj.url = obj.url + '?rand=' + Math.random();
    
        obj.data = params(obj.data);
    
        if (obj.method === 'get') {
    
            obj.url = obj.url.indexOf('?') == -1 ? obj.url + '?' + obj.data : obj.url + '&' + obj.data;
    
        }
    
     
    
        if (obj.async === true) {
    
            xhr.onreadystatechange = function () {
    
                if (xhr.readyState == 4) {
    
                    callback();
    
                }
    
            };
    
        }
    
        xhr.open(obj.method, obj.url, obj.async);
    
        if (obj.method === 'post') {
    
            xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
    
            xhr.send(obj.data);
    
        } else {
    
            xhr.send(null);
    
        }
    
        if (obj.async === false) {
    
            callback();
    
        }
    
        function callback () {
    
            if (xhr.status == 200) {
    
                obj.success(xhr.responseText); //回调
    
            } else {
    
                alert('数据返回失败!状态代码:' + xhr.status + ',状态信息:' + xhr.statusText);
    
            }
    
        }
    
    }
    
     
    
    //名值对编码
    
    function params(data) {
    
        var arr = [];
    
        for (var i in data) {
    
            arr.push(encodeURIComponent(i) + '=' + encodeURIComponent(data[i]));
    
        }
    
        return arr.join('&');
    
    }
    

              希望能够帮到你!

  • 相关阅读:
    【XSS技巧拓展】————23、多反射型XSS
    【XSS技巧拓展】————22、Source-Breaking Injections
    【XSS技巧拓展】————21、Location Based Payloads – Part II
    【XSS技巧拓展】————21、Location Based Payloads – Part I
    【XSS技巧拓展】————20、Agnostic Event Handlers
    Webshell如何bypass安全狗,D盾
    javaweb的面试题
    java面试题基础(二)
    java面试题基础(一)
    Mysql数据库简单使用
  • 原文地址:https://www.cnblogs.com/nujufoul/p/7050382.html
Copyright © 2011-2022 走看看