回调封装ajax

当我们向将后端的数据渲染到页面时,我们就需要去后端请求数据,利用局部刷新技术将我们获取的数据渲染到页面上;这里就要利用AJAX技术。

建立端口,传送数据

我们传入前端的数据是JSON数据所以要将其转成字符串。

router.js

var fs=require("fs")

var url=require("url")

var querysting=require("querystring")

var mime=require("mime")

let urls={}

var http=require("http")

let router=function(req,res){

    //这个函数每次用户访问时运行

    let pathname=url.parse(req.url).pathname

    fs.readFile(router.basepath+pathname,(err,data)=>{

        if(!err){

            res.setHeader("content-Type",mime.getType(pathname))

            res.end(data)

        }else{

            if(!urls[pathname]){res.end("404 not found-mymvc")}

            else{urls[pathname](req,res)}

        }

    })

}

router.static=function(path){

    this.basepath=path

}

router.get=function(url,cb){

    urls[url]=cb

}

router.basepath=__dirname+"/src"

http.createServer(router).listen(8080)

module.exports=router;

index.html

<!DOCTYPE html>

<html lang="en">

<head>

    <meta charset="UTF-8">

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

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

    <title>Document</title>

</head>

<body>

    <button onclick="fn()">点击显示数据</button>

    <script>

        function fn() {

          //AJAX请求

        //1.创建ajax对象

            var xhr = new XMLHttpRequest() || new  ActiveXObject("microsoft.XMLHTTP")

    //2.配置连接信息

            xhr.open("GET", "/home", true)

     //3.发送网络请求

            xhr.send()

 //4.等待

                // while(xhr.readyState!=4){                    

                // }

//xhr.readyState!=4当readyState=4时才是后端发回的数据,所以要等待

            xhr.onreadystatechange = function () {

                if (xhr.readyState == 4 && xhr.status == 200) {

                    change(xhr.responseText)

                    // console.log(xhr.responseText)

                }

            }

            function change(str) {

//将收到的JSON数据转化成为对象

                var obj=JSON.parse(str)

                console.log(obj)

//利用for循环取出对象里面的数据,动态的添加标签将数据渲染到页面上

                for(let i=0;i<obj.data.length;i++){

                    console.log(obj.data[i],11111)

                    var box = document.createElement("div")

                box.className = box

                document.body.appendChild(box)

                box.innerHTML=`${obj.data[i].name}---${obj.data[i].age}`

                }

            }

        }

    </script>

</body>

</html>

 

我们会发现如果是一份数据那么代码就不会太多,但是如果有很多份网页呢,那麽我们就需要写很多次相同的网络请求。代码简化,将AJAX请求封装成一个函数,使用时直接调用函数,传入想要获取数据的网址和接受数据的函数。

 

回调函数

 tool("/login",cb)

 tool函数一般是执行任务的函数 当这个任务执行完毕时调用传入的cb函数 然后开始运行cb的代码 在这种设计中 cb函数就是我们说的回调函数

回调函数来设计一个网络请求工具

 tool("/login",cb)

 tool函数就是一个简单的封装了ajax请求的工具 在tool内部 去用ajax请求传入的第一个参数"/login"对应网址 当请求返回数据时 就把数据传给cb函数使用(调用cb)

        function tool(url, cb) {

            var xhr = new XMLHttpRequest() || new ActiveXObject("Microsoft.XMLHTTP")

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

            xhr.send()

            xhr.onreadystatechange = function () {

                if (xhr.readyState == 4 && xhr.status == 200) {

                    // console.log(xhr.responseText)

                    //写页面

                    cb(xhr.responseText)

                }

            }

        }

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值