ajax简单封装

2020-02-16  本文已影响0人  kino2046

ajax同源非同源

        非同源:跨域

            http://www.kaikeba.com:443/news/id/1

            同源:协议(http,https)  域名(www.kaikeba.com,localhost,127.0.0.1)  端口:443 一样 同源;有一个不一样 跨域


ajax简单封装

<!DOCTYPE html>

<html lang="en">

<head>

    <meta charset="UTF-8">

    <meta name="viewport" content="width=device-width, initial-scale=1.0">

    <meta http-equiv="X-UA-Compatible" content="ie=edge">

    <title>Document</title>

</head>

<body>

<!-- <form enctype="application/x-www-form-urlencoded"></form> -->

</body>

<script>

    ajax({

        url: "/test",

        method: "post",

        data: {

            hello: "你好",

            height: "178cm"

        },

        success(res) {

            console.log(res)

        }

    })

    function ajax(opts) {

        let newOpts = Object.assign({          //方法用于对象的合并

            url: "",

            method: "get",

            data: "",

            async:true,

            headers:{

               "content-type":"application/x-www-form-urlencoded" 

            },

            success() { }

        }, opts);

        let xhr = new XMLHttpRequest();

        // get 是通过querystring方式传参数;            post :send(data)       data:name=zhangsan&age=20

        // get url:/xml     data:{name:zhangsan,age:20}--->/xml?name=zhangsan&age=20&height=178            querystring是查询参&连接,不加引号

        if (newOpts.method.toLowerCase() === "get") {             //不管大写小写

            xhr.open(newOpts.method, newOpts.url + "?"+ o2u(newOpts.data),newOpts.async);

        }else{

            xhr.open(newOpts.method, newOpts.url,newOpts.async);

        }

        xhr.setRequestHeader("content-type",newOpts.headers['content-type']);

        xhr.onload=function(){

            newOpts.success(JSON.parse(xhr.responseText));

        }

        let sendData = null

        if(newOpts.method.toLowerCase()==="post"){

            // name=zhangsan&age=20&height=178

            sendData = o2u(newOpts.data);

        }

        xhr.send(sendData);

        // let obj = {

        //     name:"张三",

        //     age:20

        // }

        // console.log(o2u(obj));

        function o2u(obj) {

            // ["hello","height"] --> 0,1

            let keys = Object.keys(obj);

            let values = Object.values(obj);

            return keys.map((key, k) => {

                console.log(k)

                return key + "=" + values[k];

            }).join("&");

        }

    }

</script>

</html>


上一篇下一篇

猜你喜欢

热点阅读