ajax同步与异步,json-serve的安装与使用,node.js的下载

20.ajax

  1. json
    • 轻量级的数据格式
    • 做配置文件
    • 网络传输
  2. xml
    • 重量级的数据格式 可扩展标记语言
    • 做配置文件
    • 网络传输

现在目前主流就是大量采用json做网络传输数据格式

1.ajax的概念:

与服务器进行’通信’的一种技术,能够实现异步的刷新页面

**同步:**按照顺序一步步的执行,容易造成阻塞

**异步:**与同步是相对的,不一定按照顺序执行,不会造成阻塞

2.进程与线程

进程:

  1. 是操作系统资源’分配’的基本单位
  2. 程序从开始到结束的一次执行过程,一个基于操作系统的应用程序中一般至少会有一个进程

线程:

  1. 是操作系统’调度’的基本单位
  2. 一个进程当中程序同时运行多个分支,每个进程中至少会有一个主线程,可以有多个分线程(子线程),多个不同的线程是可以同时执行的(并行执行)

栈溢出 后进先出 LIFO

队列溢出 先进先出 FIFO

3.event loop 事件轮询

​ 宏任务 script同步 所有的事件 onclick onreadystatechange

​ 微任务 Promise() nextTick()

​ 任务队列 先进先出

​ 执行栈

  1. 先执行script,从上到下执行

  2. 开始执行 异步

    异步先执行 微任务.,是否还有微任务

  3. 宏任务 走一个 是否带有微任务

4.HTTP超文本协议

在这里插入图片描述

  1. 简单

  2. 支持 c/s 和b/s模式

  3. 灵活

  4. 无状态(对事物没有记忆能力)

    解决:cookie+session,cookie存储sessionID

    sessionId属于服务器的存储技术

    cookie属于浏览器的存储技术

  5. 无连接(断开式)

    完成一次请求+一次响应(session)会话之后,就断开

请求结构:(请求报文)

请求行(请求方式 请求路径 协议1.0/1.1/2.0)

1.0和1.1最大的区别:加了一个keep-alive(保持连接)

请求头(content-type:application/json,cookie)

请求体(key=value)

响应结构(响应报文)

状态行(协议 200 OK短语)

响应头 content-type:application:text/html,text/css

响应体数据

5.异步代码的步骤

1.创建XMLHttpRequest

2.调用open方法(“请求方式”,地址,同步/异步)

  • 同步或异步:默认是异步,true也是异步,false是同步
  • 造成阻塞,它会占据主线程
  • 异步:开启了网络请求的线程,结合事件轮询 event loop的onreadystatechange

3.send()发生请求,如果是get请求,发生null,如果是post,通过send()携带参数

4.如果是同步的,直接判断Http的状态

​ 如果是异步的,绑定onreadystatechange事件,并结合readyState的状态码

  • readyState 0 尚未调用open
  • ​ 1 已经调用open方法,为调用send方法
  • ​ 2 已经调用了send方法
  • ​ 3 获取了部分结果
  • ​ 4 获取了全部的结果

4.通过xhr.response获得结果

  • xhr.responseText 接收文本
  • xhr.responseHTML 接收HTML
    同步代码
<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width,initial-scale=1.0">
    <title>Document</title>
    <style>
        .box {
            width: 200px;
            height: 200px;
            position: absolute;
        }
    </style>
</head>

<body>
    <button>get获取数据</button>
    <div class="box">我是跑马灯</div>
    <script>
        /* 
            栈溢出 后进先出 LIFO
            队列溢出 先进先出 FIFO

            event loop 事件轮询
                宏任务 script同步 所有的事件 onclick onreadystatechange
                微任务 Promise() nextTick()
                任务队列 先进先出
                执行栈

            1.先执行script 从上到下执行
            2.开始执行 异步
                异步先执行 微任务..是否还有微任务
            3.宏任务 走一个 是否带有微任务

            http超文本传输协议
            1.简单
            2.支持 c/s 和b/s 模式
            3.灵活
            4.无状态(对事物没有记忆能力)
                解决:cookie+session,cookie存储sessionId
                session属于服务器的存储技术
                cookie属于浏览器的存储技术
            5.无连接(断开式)
                完成一次请求+一次响应(session)会话之后,就断开

            请求结构
                请求行(请求方式 请求路径 协议1.0/1.1/2.0)
                    1.0和1.1最大的区别:加了一个Keep-alive(保持链接)
                请求头(content-type:application/json)
                    换行 
                请求体 key=value
            响应的结构
                状态行 协议 1.1 200 ok(短语) 
                响应头 content-type:application ;text/html .text/css

                响应体 数据<div></div>
                */
        // 0.创建xhr
        function createXHR() {
            if (window.XMLHttpRequest) {
                return new XMLHttpRequest()
            }
            return new ActiveXObject("Msxml2.XMLHTTP")//ie6+
        }
        function get(url) {
            // 1.得到xhr
            let xhr = createXHR() //new XMLHttpRequest()
            // 2.给xhr配置请求的相关参数 open("请求方式",路径,同步/异步) true:异步,false:同步
            xhr.open("get", url, false)//同步会占据主线程,造成阻塞
            // 3.发送,由于get请求是通过URL带参数,send就发生null
            xhr.send(null)
            // 4.判断状态,获取结果
            if (xhr.status == 200) {
                return xhr.response
            }
        }
        // 配置视图操作
        var btn = document.querySelector("button")
        btn.onclick = function () {
            var res = get("http://10.41.250.72:8888/list")
            console.log(res);
        }
        // 跑马灯
        const box = document.querySelector(".box")
        setInterval(() => {
            box.style.left = box.offsetLeft + 5 + "px"
            if (box.offsetLeft > document.documentElement.clientWidth) {
                box.style.left = "0px"
            }
        }, 60)
    </script>
</body>

</html>

异步代码

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width,initial-scale=1.0">
    <title>Document</title>
    <style>
        .box {
            width: 200px;
            height: 200px;
            position: absolute;
        }
    </style>
</head>

<body>
    <button>get获取数据</button>
    <div class="box">我是跑马灯</div>
    <script>
        // 跑马灯
        const box = document.querySelector(".box")
        setInterval(() => {
            box.style.left = box.offsetLeft + 5 + "px"
            if (box.offsetLeft > document.documentElement.clientWidth) {
                box.style.left = "0px"
            }
        }, 60)

        // 创建xhr对象
        function createXHR() {
            if (window.XMLHttpRequest) {
                return new XMLHttpRequest()
            }
            return ActiveXObject("Msxml2.XMLHTTP")
        }
        // 获取xhr
        function get(url, callback) {
            let xhr = createXHR()//new XMLHttpRequest()
            xhr.open("get", url)//默认是true 异步
            xhr.send(null)
            // 什么时候响应数据呢?如果有数据来了,就自动触发onreadystatechange事件
            xhr.onreadystatechange = function () {
                if (xhr.status == 200 && xhr.readyState == 4) {
                    callback(xhr.response)
                  
                }
            }
        }
        document.querySelector("button").onclick = function () {
            get("http://10.41.250.72:8888/list", function (res) {
                console.log(res);
            })
        }
        /* 
            304:缓存
            501:服务器不支持当前请求
        */
    </script>
</body>

</html>

6.ajax的get查询的方式

  1. 查询任意字段 ?q=值

  2. 查询性别 ?sex=女

  3. 姓名的模糊查询 ?name_like=易

  4. 分页 _page=1(第几页)&_limit=3(一页有几条数据)

  5. 排序

    根据年龄进行排序 desc降序

    ?_sort=age &_order=desc

    默认根据age升序

    ?_sort=age

  6. 截取 0-5条

    ?_start=0&_end=5

  7. 年龄大于等于30 ?age_gte=30

  8. 年龄小于等于30 ?age_lte=30

7.生成package.json文件

npm init -y

在这里插入图片描述

8.安装json-server

1.先安装node.js
node.js下载地址
接下来,无脑下一步即可
2. 如果cnpm没有就需要先安装

npm install -g cnpm --registry=https://registry.npmmirror.com

全局安装

cnpm i -g json-server

创建服务器
● 1. 在桌面上创建一个文件夹 temp-server
● 2.用vscode 打开 temp-server
● 3. 点击vscode的空白地方,选择在集成终端中打开
● 4.初始化 package.json的文件
npm init -y //初始package.json

在这里插入图片描述

● 在temp-server中创建 db.json文件 还有一个public的文件
● 在db.json中添加如下模拟数据

{
    "users":[
        {"id":1001,"avatar":"./images/1.jpg", "name":"刘德华","age":22,"sex":"女","datetime":"2022-12-19 20:02:34"},
        {"id":1002,"avatar":"./images/2.jpg", "name":"蔡徐坤","age":21,"sex":"男","datetime":"2022-12-20 20:02:34"},
        {"id":1003,"avatar":"./images/3.jpg", "name":"周杰伦","age":24,"datetime":"2022-12-01 20:02:34"},
        {"id":1004,"avatar":"./images/4.jpg", "name":"吴彦祖","age":28,"datetime":"2022-12-09 20:02:34"},
        {"id":1005,"avatar":"./images/5.jpg", "name":"彭于晏","age":30,"datetime":"2022-12-29 20:02:34"},
        {"id":1006,"avatar":"./images/6.jpg", "name":"赞","age":18,"datetime":"2022-12-06 20:02:34"}
    ]
}

启动json-server

json-server db.json  -s ./public  -p 8888 

访问

http://127.0.0.1:8888/users 

查询

模糊查询
http://127.0.0.1:8888/users?q=刘      // q 模糊查询的字段
精确查询
http://127.0.0.1:8888/users?id=1001   根据id查询
http://127.0.0.1:8888/users?name=刘德华  根据name查询
http://127.0.0.1:8888/users?id_gte=1003&id_lte=1004   大于等于1003的,小于等于1004

静态页面

<!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>
    <script src="https://cdn.jsdelivr.net/npm/axios/dist/axios.min.js"></script>
    <script src="https://cdn.bootcdn.net/ajax/libs/moment.js/2.29.4/moment.js"></script>
</head>

<body>

    <!-- "id": 1001,"avatar": "./images/1.jpg","name": "刘德华","age": 22,"sex": "女","datetime": "2022-12-19 20:02:34" -->
    <form>
        <p>
            <input type="file"> <img style="width:100px" name="avatar" src="" alt="">
        </p>
        <p>
            <input name="username" placeholder="姓名">
        </p>
        <p>
            <input name="age" placeholder="年龄">
        </p>
        <p>
            <input name="sex" type="radio" value="" checked><input name="sex" type="radio" value=""></p>
        <p>
            <button>保存</button>
        </p>
    </form>
</body>

</html>

//图片预览

var oFile = document.querySelector("[type='file']");
oFile.onchange = function (e) {
  const fileread = new FileReader();
  fileread.readAsDataURL(e.target.files[0]);
  fileread.onload = function (e) {
    console.log(e.target.result);
    document.querySelector('[name="avatar"]').src = e.target.result;
  }
}
document.forms[0].onsubmit = function () {
  var oUser = {
    avatar: `./images/${oFile.files[0].name}`,
    name: this.username.value,
    age: this.age.value,
    sex: document.querySelector("[name='sex']:checked").value,
    datetime: moment().format('YYYY-MM-DD HH:mm:ss:SSS')
  }
  console.log(oUser);

  //发送到json-server上
  axios.post("http://127.0.0.1:8888/users", oUser).then(function (res) {
    console.log(res);
  })

  return false;
}


//-----查询所有的数据
function loadData() {
  axios.get("http://localhost:8888/users").then(function (res) {
    console.log(res);
  })
}
loadData();

//---- put 完全 修改
function modilfy(id = 1001) {
  axios({
    method: "put",
    url: `http://localhost:8888/users/${id}`,
    data: {
      name: "标哥"
    }
  }).then(function (res) {
    console.log(res);
  })
}

//---- patch  部分 修改
function modilfy(id = 1001) {
  axios({
    method: "patch",
    data: {
      name: "标哥"
    }
  }).then(function (res) {
    console.log(res);
  })
}

//分页 带排序
function getPage(pageIndex = 1, pageSize = 5) {
  axios.get("http://localhost:8888/users", {
    params: {
      _page: pageIndex,
      _limit: pageSize,
      _sort: "id",
      _order: "desc"  //升序 asc,desc 降序
    }
  }).then(function (res) {
    console.log(res);
  })
}


//删除
//分页 带排序
function deleteById(id) {

  axios({
    url: `http://localhost:8888/users/${id}`,
    method: "delete"
  }).then(function (res) {
    console.log(res);
  })
}

//模糊搜索,返回是一个数组 
function search(str) {
  axios.get("http://localhost:8888/users",{
    params:{
      q:str
    }
  }).then(function (res) {
    console.log(res.data);
  })
}

json-server使用
json-server启动后,在程序根目录json-server会自动生成db.json文件,通过修改该文件可配置测试的接口类型。在终端上, ctrl+c终止处理操作,输入指令npm run json:server-remote可自动下载官网的接口实例。
接口请求参数如下:
1、分页【关键字:_page】
应用:http://localhost:3000/posts?_page=1
2、排序【关键字:_sort,_order】
_sort后面为要分类的键名,_order为排序的方式,DESC(倒序),ASC(顺序)。
应用:http://localhost:3000/posts?_sort=author
应用:http://localhost:3000/posts?_sort=author&_order=DESC
3、切分【关键字:_start,_end,_limit】
类似于js里面的slice函数。slice(_start,_end),从数据里面取出数据。数据不包括_end,_limit可以和_start配合,表示从_start位置开始_limit条数据被取出来。
应用:http://localhost:3000/posts?_start=1&_limit=3
4、操作【关键字:_gte,_lte,_ne,[key]_like】
_gte:大于或等于,_lte:小于或等于,_ne:不等于,[key]_like:模糊搜索
应用:http://localhost:3000/posts?author_like=author
5、全局搜索【关键字:q】
q为数据中全局搜索传入的参数
应用:http://localhost:3000/posts?q=json
6、字段扩展【关键字:_embed,_expand】
_embed:扩展子数据字段,_expand:扩展父数据字段

原文地址:https://blog.csdn.net/qq_46372132/article/details/133798567

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


文章浏览阅读2.4k次。最近要优化cesium里的热力图效果,浏览了网络上的各种方法,发现大多是贴在影像上的。这么做好是好,但是会被自生添加的模型或者其他数据给遮盖。其次是网上的方法大多数是截取成一个矩形。不能自定义的截取自己所需要的。经过尝试,决定修改下cesium heatmap,让他达到我们需要的要求。首先先下载 cesium heatmap包。其中我们可以看到也是通过叠加entity达到添加canvas的方法绘制到地图上。我们先把这一段代码注释} else {} };
文章浏览阅读1.2w次,点赞3次,收藏19次。在 Python中读取 json文件也可以使用 sort ()函数,在这里我介绍一个简单的示例程序: (4)如果我们想将字符串转换为列表形式,只需要添加一个变量来存储需要转换的字符串即可。在上面的代码中,我们创建了一个名为` read`的对象,然后在文件的开头使用`./`关键字来命名该对象,并在文件中定义了一个名为` json`的变量,并在其中定义了一个名为` json`的字段。比如,我们可以使用 read方法读取 json文件中的内容,然后使用 send方法将其发送到 json文件中。_python怎么读取json文件
文章浏览阅读1.4k次。首字母缩略词 API 代表应用程序编程接口,它是一种设备,例如用于使用编程代码发送和检索数据的服务器。最常见的是,该技术用于从源检索数据并将其显示给软件应用程序及其用户。当您访问网页时,API 的工作方式与浏览器相同,信息请求会发送到服务器,如何在 Windows PC 中手动创建系统还原点服务器会做出响应。唯一的区别是服务器响应的数据类型,对于 API,数据是 JSON 类型。JSON 代表 JavaScript Object Notation,它是大多数软件语言中 API 的标准数据表示法。_api是什么 python
文章浏览阅读802次,点赞10次,收藏10次。解决一个JSON反序列化问题-空字符串变为空集合_cannot coerce empty string ("") to element of `java.util.arraylist
文章浏览阅读882次。Unity Json和Xml的序列化和反序列化_unity json反序列化存储换行
文章浏览阅读796次。reader.readAsText(data.file)中data.file的数据格式为。使用FileReader对象读取文件内容,最后将文件内容进行处理使用。_a-upload 同时支持文件和文件夹
文章浏览阅读775次,点赞19次,收藏10次。fastjson是由国内的阿里推出的一种json处理器,由java语言编写,无依赖,不需要引用额外的jar包,能直接运行在jdk环境中,它的解析速度是非常之快的,目前超过了所有json库。提示:以下是引用fastjson的方法,数据未涉及到私密信息。_解析器用fastjson还是jackson
文章浏览阅读940次。【Qt之JSON文件】QJsonDocument、QJsonObject、QJsonArray等类介绍及使用_使用什么方法检查qjsondocument是否为空
文章浏览阅读957次,点赞34次,收藏22次。主要内容原生 ajax重点重点JSON熟悉章节目标掌握原生 ajax掌握jQuery ajax掌握JSON第一节 ajax1. 什么是ajaxAJAX 全称为,表示异步的Java脚本和Xml文件,是一种异步刷新技术。2. 为什么要使用ajaxServlet进行网页的变更往往是通过请求转发或者是重定向来完成,这样的操作更新的是整个网页,如果我们只需要更新网页的局部内容,就需要使用到AJAX来处理了。因为只是更新局部内容,因此,Servlet。
文章浏览阅读1.4k次,点赞45次,收藏13次。主要介绍了JsonFormat与@DateTimeFormat注解实例解析,文中通过示例代码介绍的非常详细,对大家的学习 或者工作具有一定的参考学习价值,需要的朋友可以参考下 这篇文章主要介绍了从数据库获取时间传到前端进行展示的时候,我们有时候可能无法得到一个满意的时间格式的时间日期,在数据库中显 示的是正确的时间格式,获取出来却变成了时间戳,@JsonFormat注解很好的解决了这个问题,我们通过使用 @JsonFormat可以很好的解决:后台到前台时间格式保持一致的问题,
文章浏览阅读1k次。JsonDeserialize:json反序列化注解,作用于setter()方法,将json数据反序列化为java对象。可以理解为用在处理接收的数据上。_jsondeserialize
文章浏览阅读2.7k次。labelme标注的json文件是在数据标注时产生,不能直接应用于模型训练。各大目标检测训练平台或项目框架均有自己的数据格式要求,通常为voc、coco或yolo格式。由于yolov8项目比较火热,故此本博文详细介绍将json格式标注转化为yolo格式的过程及其代码。_labelme json 转 yolo
文章浏览阅读790次,点赞26次,收藏6次。GROUP_CONCAT_UNORDERED(): 与GROUP_CONCAT类似,但不保证结果的顺序。COUNT_DISTINCT_AND_ORDERED(): 计算指定列的不同值的数量,并保持结果的顺序。COUNT_ALL_DISTINCT(): 计算指定列的所有不同值的数量(包括NULL)。AVG_RANGE(): 计算指定列的最大值和最小值之间的差异的平均值。JSON_OBJECT(): 将结果集中的行转换为JSON对象。COUNT_DISTINCT(): 计算指定列的不同值的数量。_mysql json 聚合
文章浏览阅读1.2k次。ajax同步与异步,json-serve的安装与使用,node.js的下载_json-serve 与node版本
文章浏览阅读1.7k次。`.net core`提供了Json处理模块,在命名空间`System.Text.Json`中,下面通过顶级语句,对C#的Json功能进行讲解。_c# json
文章浏览阅读2.8k次。主要介绍了python对于json文件的读写操作内容_python读取json文件
文章浏览阅读770次。然而,有时候在处理包含中文字符的Json数据时会出现乱码的情况。本文将介绍一种解决Json中文乱码问题的常见方法,并提供相应的源代码和描述。而某些情况下,中文字符可能会被错误地编码或解码,导致乱码的出现。通过适当地控制编码和解码过程,我们可以有效地处理包含中文字符的Json数据,避免乱码的发生。通过控制编码和解码过程,我们可以确保Json数据中的中文字符能够正确地传输和解析。为了解决这个问题,我们可以使用C#的System.Text.Encoding类提供的方法进行编码和解码的控制。_c# json 中文编码
文章浏览阅读997次。【代码】【工具】XML和JSON互相转换。_xml 转json
文章浏览阅读1.1k次。json path 提取数据_jsonpath数组取值
文章浏览阅读3w次,点赞35次,收藏36次。本文主要介绍了pandas read_json时ValueError: Expected object or value的解决方案,希望能对学习python的同学们有所帮助。文章目录1. 问题描述2. 解决方案_valueerror: expected object or value