首页 > 其他分享 >Ajax入门

Ajax入门

时间:2022-11-23 19:14:32浏览次数:31  
标签:function const 入门 get res myajax xhr Ajax

概述



Ajax原理



server.js

const Koa = require("koa");
const router = require("koa-router")();
const views = require("koa-views");
const nunjucks = require("nunjucks");
const app = new Koa();

app.use(views(__dirname + '/views',{
    map:{html:'nunjucks'}
}));

router.get("/",async ctx =>{
    await ctx.render("index");
});

router.get("/data",async ctx =>{
    ctx.body = "hello world";
});

app.use(router.routes());

app.listen("3000",() => {
    console.log("server is running");
});

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>
    <h1>首页</h1>
    <button>获取的数据</button>
    <script>
        document.querySelector("button").onclick = function(){
            let xhr = new XMLHttpRequest();
            xhr.open("get","/data");//规定请求的类型,路径
            xhr.send();//发送请求
            xhr.onreadystatechange = function(){//监听xhr的readystate属性,readystate变化了就会触发事件
                if(xhr.readyState === 4 && xhr.status == 200){
                    alert(xhr.responseText);//发出请求后的响应文本
                }
            }
        }
    </script>
</body>
</html>

readyState的数值


这么多代码仅仅只获取了一个字符串,显得繁琐。以后的项目开发中更多的是用封装好的第三方库用ajax,不必写这些,会看就行

封装上述的ajax


获取异步数据不能用return,因为异步数据往往需要从网络中花费些时间加载出来,而return会立即执行,导致数据加载不出来
可以看到没有获取到数据

但请求发送了服务器也响应了

通过回调函数实现封装ajax

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>
    <h1>首页</h1>
    <button>获取的数据</button>
    <script>
        document.querySelector("button").onclick = function(){
            myajax("get","/data",function(res){//res对应xhr.responseText
                alert(res);
            });
        }

        function myajax(method,url,next){//next回调函数
            let xhr = new XMLHttpRequest();
            xhr.open(method,url);
            xhr.send();
            let rusult = "";
            xhr.onreadystatechange = function(){
                if(xhr.readyState === 4 && xhr.status == 200){
                    next(xhr.responseText);
                }
            }
        }
    </script>
</body>
</html>

通过Promise实现封装ajax

但回调函数用多了不利于维护,现在更常用promise

<!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>
    <h1>首页</h1>
    <button>获取的数据</button>
    <script>
        document.querySelector("button").onclick = function(){
            //myajax会return一个Promise对象
            //then获取resolve方法传进来的值xhr.responseText
            myajax("get","/data").then(res => {//res回调
                alert(res);
            });
        }

        function myajax(method,url){
            return new Promise(function(resolve){
                let xhr = new XMLHttpRequest();
            xhr.open(method,url);
            xhr.send();
            let rusult = "";
            xhr.onreadystatechange = function(){
                if(xhr.readyState === 4 && xhr.status == 200){
                    resolve(xhr.responseText);
                }
            }
            });
        }
    </script>
</body>
</html>

标签:function,const,入门,get,res,myajax,xhr,Ajax
From: https://www.cnblogs.com/ben10044/p/16919462.html

相关文章

  • SpringCloud入门
    一、SpringCloud简介与版本选择1、简介SpringCloud是一系列框架的集合。它利用SpringBoot的开发便利性巧妙地简化了分布式系统基础设施的开发,如服务发现注册、配置中心......
  • 篇(20)-Asp.Net Core入门实战-完结之一期阶段总结
    入门实战-完结之一期阶段总结用了几天的功夫,编写和演练的这个Asp.NetCore简单入门的教程已经讲完,下一期可以将完善其功能,将UI功能也给其套上,至少可以达到商用的目的。简......
  • 一、FFmpeg 的初尝试《FFmpeg 音视频开发基础入门到实战》
    学习目标了解FFmpeg学习FFmpeg工具的下载及环境配置了解FFmpeg工具的使用方式了解FFmpegplay的使用方法了解FFmpegpaly的音量设置、窗口设置、音量设置等......
  • 【Web安全攻防从入门到精通】代码基础
    代码基础HTML基础HTML结构<!DOCTYPEhtml><!--声明为HTML5文档--><html><!--元素是HTML页面的根元素--><!--元素包含了文档的元(meta)数据<body>......
  • 网络爬虫入门
    网络爬虫,又称作网络蜘蛛、网络机器人,在某社区中经常被称为网页追逐者。可以按照指定的规则(网络爬虫的算法)自动浏览或抓取网络中的信息,通过Python可以很轻松地编写爬虫程序或......
  • Pygame入门
    Pygame是跨平台Python模块,专为电子游戏设计,包含图像、声音等,创建在SDL(simpledirectmedialayer)基础上,允许实时电子游戏研发而不会被低级语言,如C或是更低级的汇编语言束缚。......
  • python编程(gevent入门)
        大家都知道python脚本执行的时候不是很快,特别是python下面的多线程机制,长久以来一直被大家所诟病。所以,很多同学都在思考python下面有没有什么方法可以让python执行......
  • Filter,Listener,AJAX和JSON
    Filter是过滤器,就是在浏览器发送请求给服务器访问服务器资源时,需要先经过服务器中的filter过滤器,filter放行了,请求才能到达资源哪里,常用于权限设置,比如要查看某个数据库中......
  • 3.2 Docker最新入门教程-Docker入门-将应用程序容器化
    3.2将应用程序容器化对于本指南的其余部分,您将使用一个在Node.js中运行的简单待办事项列表管理器。如果您不熟悉Node.js,请不要担心。本指南不需要JavaScript经验。......
  • 3.1 Docker最新入门教程-Docker入门-概述
    3.1概述欢迎!我们很高兴您想学习Docker。本指南包含有关如何开始使用Docker的分步说明。您将在本指南中学到和做的一些事情是:构建并运行镜像作为容器使用DockerHub共......