Ajax+JSON学习二
Ajax+JSON学习二
文章目录
- 前言
- 三、前后端数据交互
- 3.1. GET请求
- 3.2. POST请求
- 3.3. jQuery 中的 Ajax
- 3.4. Ajax 的替代品:fetch
- 3.5. 小结
- 四、JSON
- 4.1. JSON简介
- 4.2. JSON 语法规则
- 4.3. JSON的解析和序列化
- 总结
前言
三、前后端数据交互
3.1. GET请求
GET 请求一般用于信息获取,它没有请求主体,而是使用 URL 传递参数(即:传递数据给后台)。
GET 传递参数的方式,分两步:
- 对所需发送的数据(具有名称和值)执行普通的 URL 编码,即:由一对对 “名称=值” 组成(称为:名/值对),每一对之间用 “&” 拼接,如 “name=value&name=value&…&name=value”;
- 由于 名/值对 会附加在 URL 地址后面,因此在这串字符参数的最前面需要添加个 “?”,表示 URL 的 查询参数 开始。
// GET请求的后端接口
var url = "/statics/demosource/demo_get_json.php";// 获取用户输入的表单数据
var country = document.getElementById("country").value,city = document.getElementById("city").value;// 将需要传递的参数拼接为 "名称=值" 对的形式
var query = "country=" + country + "&city=" + city;// 在 query 前面添加个 "?",再拼接后端接口
var queryURL = url + "?" + query;// 发起GET请求:使用拼接好的 queryURL
ajaxGet(queryURL);
扩展:因 JavaScript 对象数据是键值对的形式,它与上述的名值对具有类似的性质,因此在 Ajax 的应用中,传递的数据通常直接来自一个 JavaScript 对象,这时只需遍历这个 JavaScript 对象,将每一个键值对按 “名称=值” 的形式进行拼接即可。
function urlencodeData (data) {if (!data) return "";var pairs = []; // 存储名/值对for (var name in data) {if (!data.hasOwnProperty(name)) continue; // 如果是继承属性则跳过if (typeof data[name] === "function") continue; // 如果是方法则跳过// 将 null 与 undefined 改为空字符串var value = (data[name] === null || data[name] === undefined) ? "" : data[name].toString();// encodeURIComponent 用于对空格、中文等特殊字符进行 URI 编码pairs.push(encodeURIComponent(name) + "=" + encodeURIComponent(value));}return pairs.join("&");
}
3.2. POST请求
POST 请求一般用于修改服务器上的资源,它需要发送一个请求主体,客户端传递给服务器的数据就包含在这个请求主体中。
前置知识:"Content-Type"请求头用于设置请求主体的编码格式。
POST 请求使用 表单编码 的方式来发送数据的关键步骤:
- 对所需发送的数据(具有名称和值)执行普通的 URL 编码,即:像 GET 请求那样拼接为 名/值 对的形式;
- 将"Content-Type"请求头的值设置为"application/x-www-form-urlencoded"。
JSON 是一种轻量级的前后端数据交换格式,直接使用JSON.stringify原生 API 即可实现 JSON 编码,比表单编码的方式更加快捷。
POST 请求使用 JSON编码 的方式来发送数据的关键步骤:
- “Content-Type"请求头的值需要为"application/json”;
- 对请求主体进行序列化,在 JavaScript 中可使用JSON.stringify完成这步操作。
// 获取用户输入的表单数据
var country = document.getElementById("country").value,city = document.getElementById("city").value;// 将数据转换为 JavaScript 对象
var data = {country : country,city : city
}var xhr = new XMLHttpRequest();
xhr.onreadystatechange = function () {// ... ... 省略事件处理程序
}// 指定 POST 请求
xhr.open("POST", "/statics/demosource/demo_json_data.php");// 设置请求主体的编码方法
xhr.setRequestHeader("Content-Type", "application/json");// 编码请求主体并发送
xhr.send(JSON.stringify(data));
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Tryrun 11</title>
</head>
<body><div id="form"><label for="country">国家:<input type="text" name="country" id="country"></label><label for="city">城市:<input type="text" name="city" id="city"></label></div><hr><div>你查询的国家是:<span id="ipt_country"></span></div><div>你查询的城市是:<span id="ipt_city"></span></div><br><button type="button" id="search">查询</button>(查询成功后会把你输入的值显示在上方)<script>var oSearch = document.getElementById("search"),oIpt_country = document.getElementById("ipt_country"),oIpt_city = document.getElementById("ipt_city");oSearch.onclick = function () {var country = document.getElementById("country").value,city = document.getElementById("city").value;var query = "country=" + country + "&city=" + city;var xhr = window.XMLHttpRequest ? new window.XMLHttpRequest() : new ActiveXObject("Microsoft.XMLHTTP");xhr.onreadystatechange = function () {if (xhr.readyState === 4) {if (xhr.status >= 200 && xhr.status < 300 || xhr.status === 304) {var res = JSON.parse(xhr.responseText);oIpt_country.innerText = res.params.country;oIpt_city.innerText = res.params.city;}}}xhr.open("POST", "/statics/demosource/demo_post_json.php");xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");xhr.send(query);}</script>
</body>
3.3. jQuery 中的 Ajax
jQuery 是一个 JavaScript 工具库,它封装了 JavaScript 常用的功能代码,包括我们刚刚学完的 Ajax。
jQuery 中,Ajax 常见的请求方式有以下几种:
$.ajax(url, options)
$.get(url, data, callback, dataType)
$.post(url, data, callback, dataType)
$.getJSON(url, data, callback)
$.getScript(url, callback)
jQuery元素.load(url, data, callback)
// 使用jQuery发起ajax请求
$.ajax("/statics/demosource/demo_get_json.php", {//请求类型type: "GET",//要发送的数据data: {country: country,city: city},//数据格式dataType: "json",//请求成功后执行success: function (res) { // res为响应成功返回的数据oIpt_country.innerText = res.params.country;oIpt_city.innerText = res.params.city;},//请求失败后执行error: function (res) { // 这里的res为响应失败返回的数据alert("请求失败:" + res.status);}
});
3.4. Ajax 的替代品:fetch
Fetch API 是随 ES6 发展而出现的一个 JavaScript 原生接口,与 Ajax 一样允许开发者异步发起 HTTP 请求,但却以更加简单明了的调用方式、基于 Promise 的数据处理方式被称作是 Ajax 的替代品。
fetch("/statics/demosource/demo_json_data.php", {method: "POST",header: new Headers({"Content-Type" : "application/json"}),body: JSON.stringify(data)
})
.then(function (res) {return res.ok ? res.json() : Promise.reject(res);
})
.then(function (data) {oIpt_country.innerText = data.country;oIpt_city.innerText = data.city;
})
.catch(function (res) {alert("请求失败:" + res.status);
})
3.5. 小结
通过学习 Ajax,明白了:XMLHttpRequest对象其实就是 HTTP 规范在客户端 JavaScript 中的实现,一次 HTTP 请求,就对应着一个XMLHttpRequest实例,在这个实例上,可以取到 HTTP 协议中规定的各种协议属性。
四、JSON
4.1. JSON简介
JSON = JavaScript Object Notation,意思是:JavaScript 对象表示法,是一种轻量级的数据交换格式。
JSON 是 JavaScript 的子集,它利用了 JavaScript 中的一些模式来表示结构化数据,是在 JavaScript 中读写结构化数据的更好方式。
关于 JSON,要明白它只是一种数据格式,独立于编程语言,虽然与 JavaScript 具有相同的语法形式,但并不是只有 JavaScript 才能使用 JSON,很多编程语言都有针对 JSON 的解析器和序列化器。
4.2. JSON 语法规则
JSON 的语法可以表示以下三种类型的值:
- 简单值:使用与 JavaScript 相同的语法,可以在 JSON 中表示number、string、boolean 与 null,但 JSON 不支持 JavaScript 中的特殊值undefined;
- 对象:对象作为一种复杂数据类型, 表示的是一组无序的键值对,而每个键值对中的值可以是简单值,也可以是复杂数据类型的值;
- 数组:数组也是一种复杂数据类型,表示一组有序的值的列表,数组的值也可以是任意类型 —— 简单值、对象 或 数组。
注意:
JSON字符串 与 JavaScript字符串 的最大区别在于,JSON 字符串必须使用 双引号,单引号会导致语法错误。
与 JavaScript 的字面量相比,JSON 对象的键(属性名) 必须 加 双引号。
JSON 数组采用的就是 JavaScript 中的数组字面量形式
4.3. JSON的解析和序列化
JSON 对象的方法:
JSON.stringify():用于序列化 JavaScript 对象,将其转换为 JSON 字符串;
JSON.parse():用于解析 JSON 字符串,将其转换为 JavaScript 值。
知识点补充:解析 JSON 字符串的其它方法
方法一:使用 JavaScript 的eval()函数
var obj = eval("(" + json + ")");
因为eval()函数会将传入的字符串当作 JavaScript 代码执行,为了防止 JavaScript 对象的花括号{}被误解析为 JavaScript 函数的花括号,需要对 JSON 字符串加上圆括号。
方法二:巧妙使用 Function 构造函数
var obj = new Function("return (" + json + ")")();
总结
2023–12-17
相关文章:
Ajax+JSON学习二
AjaxJSON学习二 文章目录 前言三、前后端数据交互3.1. GET请求3.2. POST请求3.3. jQuery 中的 Ajax3.4. Ajax 的替代品:fetch3.5. 小结 四、JSON4.1. JSON简介4.2. JSON 语法规则4.3. JSON的解析和序列化 总结 前言 三、前后端数据交互 3.1. GET请求 GET 请求一般用…...
STM32单片机的基本原理与应用(六)
串口测试实验 基本原理 在串口实验中,是通过mini_USB线搭建终端与电脑端(也可称终端,为做区分称电脑端)的“桥梁”,电脑端的串口调试助手通过mini_USB线向终端发送信息,由CH340芯片将USB接口进行转换&…...
《MySQL 简易速速上手小册》第4章:数据安全性管理(2024 最新版)
文章目录 4.1 用户认证和权限控制4.1.1 基础知识4.1.2 重点案例:使用 Python 管理 MySQL 用户权限4.1.3 拓展案例 4.2 防止 SQL 注入和其他安全威胁4.2.1 基础知识4.2.2 重点案例:使用 Python 和 MySQL 进行安全的数据查询4.2.3 拓展案例 4.3 数据加密和…...
VUE学习之路——列表渲染
<p v-for"item in items">{{ item }}</p>使用v-for进行列表的渲染。 这仅仅是一个简单的demo,使用v-for可以用来遍历数组和对象,具体如下: 注意:遍历数组或对象的时候,()…...
CentOS 安装 redis 7.2
nginx官网 https://redis.io/download/ 把鼠标放到这里,复制下载地址 在服务器找个文件夹执行命令 wget https://github.com/redis/redis/archive/7.2.4.tar.gz tar -zxvf 7.2.4.tar.gz make make install 看到这几行就说明安装成功了 不放心的话再查看下b…...
运维自动化bingo前端
项目目录结构介绍 项目创建完成之后,我们会看到bingo_web项目其实是一个文件夹,我们进入到文件夹内部就会发现一些目录和文件,我们简单回顾一下里面的部分核心目录与文件。 ├─node_modules/ # node的包目录,项目运行的依赖包…...
Project2013下载安装教程,保姆级教程,附安装包和工具
前言 Project是一款项目管理软件,不仅可以快速、准确地创建项目计划,而且可以帮助项目经理实现项目进度、成本的控制、分析和预测,使项目工期大大缩短,资源得到有效利用,提高经济效益。软件设计目的在于协助专案经理发…...
【机器学习与自然语言处理】预训练 Pre-Training 各种经典方法的概念汇总
【机器学习与自然语言处理】预训练 Pre-Training 各种经典方法的概念汇总 前言请看此正文预训练 Pre-Training无监督学习 unsupervised learning概念:标签PCA 主成分分析(Principal Component Analysis)降维算法LSA 潜在语义分析(…...
Mac电脑如何通过终端隐藏应用程序?
在我们使用Mac电脑的时候难免会遇到想要不想看到某个应用程序又不想卸载它们。值得庆幸的是,macOS具有一些强大的文件管理功能,允许用户轻松隐藏(以及稍后显示)文件甚至应用程序。 那么,Mac电脑如何通过终端隐藏应用程…...
linker list
linker list是利用lds 描述符实现同类型数据连续排布的一种机制。 下面是uboot里面的应用说明 lds文件里面需要增加section描述: . ALIGN(4);.u_boot_list : {KEEP(*(SORT(.u_boot_list*)));}linker_list.h: /* SPDX-License-Identifier: GPL-2.0 */ /** include…...
[CUDA手搓]从零开始用C++ CUDA搭建一个卷积神经网络(LeNet),了解神经网络各个层背后算法原理
文章目录 前言一、所需环境二、实现思路2.1. 定义了LeNet网络模型结构,并训练了20次2.2 以txt格式导出训练结果(模型的各个层权重偏置等参数)2.3 (可选)以pth格式导出训练结果,以方便后期调试2.4 C CUDA要做的事 三、C CUDA具体实现3.1 新建.cu文件并填好…...
【开源】基于JAVA+Vue+SpringBoot的数据可视化的智慧河南大屏
目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块三、系统展示四、核心代码4.1 数据模块 A4.2 数据模块 B4.3 数据模块 C4.4 数据模块 D4.5 数据模块 E 五、免责说明 一、摘要 1.1 项目介绍 基于JAVAVueSpringBootMySQL的数据可视化的智慧河南大屏,包含了GDP、…...
页面单跳转换率统计案例分析
需求说明 页面单跳转化率 计算页面单跳转化率,什么是页面单跳转换率,比如一个用户在一次 Session 过程中访问的页面路径 3,5,7,9,10,21,那么页面 3 跳到页面 5 叫一次单跳,7-9 也叫一次单跳, 那么单跳转化率就是要统计…...
眸思MouSi:“听见世界” — 用多模态大模型点亮盲人生活
文章目录 1. Introduction1.1 APP细节展示2. Demo2.1 论文链接2.2 联系方式3. Experiment3.1 多专家的结合是否有效?3.2 如何更好的将多专家整合在一起?Reference让盲人听见世界,复旦眸思大模型打破视觉界限,用科技点亮新生活 1. Introduction 在这个世界上,视力是探索万…...
电商小程序05用户注册
目录 1 搭建页面2 设置默认跳转总结 我们上一篇拆解了登录功能,如果用户没有账号就需要注册了。本篇我们介绍一下注册功能的实现。 1 搭建页面 打开应用,点击左上角的新建页面 输入页面的名称,用户注册 删掉网格布局,添加表单容…...
什么是UI设计?
用户界面(UI)它是人与机器互动的载体,也是用户体验(UX)一个组成部分。用户界面由视觉设计 (即传达产品的外观和感觉) 和交互设计 (即元素的功能和逻辑组织) 两部分组成。用户界面设计的目标是创建一个用户界面…...
React 实现表单组件
表单是html的基础元素,接下来我会用React实现一个表单组件。支持包括输入状态管理,表单验证,错误信息展示,表单提交,动态表单元素等功能。 数据状态 表单元素的输入状态管理,可以基于react state 实现。 …...
PlantUML绘制UML图教程
UML(Unified Modeling Language)是一种通用的建模语言,广泛用于软件开发中对系统进行可视化建模。PlantUML是一款强大的工具,通过简单的文本描述,能够生成UML图,包括类图、时序图、用例图等。PlantUML是一款…...
自学Python第二十二天- Django框架(六) django的实用插件:cron、APScheduler
django-crontab 和 django-cron 有时候需要django在后台不断的执行一个任务,简单的可以通过中间件来实现,但是中间件是根据请求触发的。如果需要定时执行任务,则需要使用到一些插件。 django-crontab 和 django-cron 是常用的用于处理定时任…...
医院挂号预约|医院挂号预约小程序|基于微信小程序的医院挂号预约系统设计与实现(源码+数据库+文档)
医院挂号预约小程序目录 目录 基于微信小程序的医院挂号预约系统设计与实现 一、前言 二、系统功能设计 三、系统实现 1、小程序用户端 2、系统服务端 (1) 用户管理 (2)医院管理 (3)医生管理 &…...
铭豹扩展坞 USB转网口 突然无法识别解决方法
当 USB 转网口扩展坞在一台笔记本上无法识别,但在其他电脑上正常工作时,问题通常出在笔记本自身或其与扩展坞的兼容性上。以下是系统化的定位思路和排查步骤,帮助你快速找到故障原因: 背景: 一个M-pard(铭豹)扩展坞的网卡突然无法识别了,扩展出来的三个USB接口正常。…...
第19节 Node.js Express 框架
Express 是一个为Node.js设计的web开发框架,它基于nodejs平台。 Express 简介 Express是一个简洁而灵活的node.js Web应用框架, 提供了一系列强大特性帮助你创建各种Web应用,和丰富的HTTP工具。 使用Express可以快速地搭建一个完整功能的网站。 Expre…...
7.4.分块查找
一.分块查找的算法思想: 1.实例: 以上述图片的顺序表为例, 该顺序表的数据元素从整体来看是乱序的,但如果把这些数据元素分成一块一块的小区间, 第一个区间[0,1]索引上的数据元素都是小于等于10的, 第二…...
深入剖析AI大模型:大模型时代的 Prompt 工程全解析
今天聊的内容,我认为是AI开发里面非常重要的内容。它在AI开发里无处不在,当你对 AI 助手说 "用李白的风格写一首关于人工智能的诗",或者让翻译模型 "将这段合同翻译成商务日语" 时,输入的这句话就是 Prompt。…...
Vue3 + Element Plus + TypeScript中el-transfer穿梭框组件使用详解及示例
使用详解 Element Plus 的 el-transfer 组件是一个强大的穿梭框组件,常用于在两个集合之间进行数据转移,如权限分配、数据选择等场景。下面我将详细介绍其用法并提供一个完整示例。 核心特性与用法 基本属性 v-model:绑定右侧列表的值&…...
遍历 Map 类型集合的方法汇总
1 方法一 先用方法 keySet() 获取集合中的所有键。再通过 gey(key) 方法用对应键获取值 import java.util.HashMap; import java.util.Set;public class Test {public static void main(String[] args) {HashMap hashMap new HashMap();hashMap.put("语文",99);has…...
定时器任务——若依源码分析
分析util包下面的工具类schedule utils: ScheduleUtils 是若依中用于与 Quartz 框架交互的工具类,封装了定时任务的 创建、更新、暂停、删除等核心逻辑。 createScheduleJob createScheduleJob 用于将任务注册到 Quartz,先构建任务的 JobD…...
相机从app启动流程
一、流程框架图 二、具体流程分析 1、得到cameralist和对应的静态信息 目录如下: 重点代码分析: 启动相机前,先要通过getCameraIdList获取camera的个数以及id,然后可以通过getCameraCharacteristics获取对应id camera的capabilities(静态信息)进行一些openCamera前的…...
实现弹窗随键盘上移居中
实现弹窗随键盘上移的核心思路 在Android中,可以通过监听键盘的显示和隐藏事件,动态调整弹窗的位置。关键点在于获取键盘高度,并计算剩余屏幕空间以重新定位弹窗。 // 在Activity或Fragment中设置键盘监听 val rootView findViewById<V…...
微软PowerBI考试 PL300-在 Power BI 中清理、转换和加载数据
微软PowerBI考试 PL300-在 Power BI 中清理、转换和加载数据 Power Query 具有大量专门帮助您清理和准备数据以供分析的功能。 您将了解如何简化复杂模型、更改数据类型、重命名对象和透视数据。 您还将了解如何分析列,以便知晓哪些列包含有价值的数据,…...
