JavaScript异步编程——03-Ajax传输json和XML

Ajax 传输 JSON

JSON 的语法

JSON(JavaScript Object Notation):是 ECMAScript 的子集。作用是进行数据的交换。语法更为简洁,网络传输、机器解析都更为迅速。

语法规则:

  • 数据在键值对中

  • 数据由逗号分隔

  • 花括号保存对象

  • 方括号保存数组

数据类型:

  • 数字(整数或浮点数)

  • 字符串(在双引号中)

  • 逻辑值(true 或 false)

  • 数组(在方括号中)

  • 对象(在花括号中)

  • null

示例:

 // 对象{"name":"fox","age":"18","sex":"true","car":null}​// 数组[{"name":"小小胡","age":"1"},{"name":"小二胡","age":"2"}]

JavaScript 中:json 字符串 <--> js 对象

基本上,所有的语言都有将 json 字符串转化为该语言对象的语法。

比如在 js 中:

  • JSON.parse():将 JSON 字符串转化为 js 对象。例如:

 // 将 JSON 字符串格式化为 js 对象var jsObj = JSON.parse(ajax.responseText);
  • JSON.stringify():将 JS 对象转化为 JSON 字符串。例如:

 var Obj = {name: 'fox',age: 18,skill: '撩妹',};​console.log(Obj);​// 将 js 对象格式化为 JSON 字符串var jsonStr = JSON.stringify(Obj);

PHP 中:json 字符串 <--> js 对象

  • json_decode()方法:将json字符串转化为变量。

  • json_encode()方法:将变量转化为json字符串。

代码举例:

 <?phpheader("Content-Type:text/html;charset=utf-8");// json字符串$jsonStr = '{"name":"itcast","age":54,"skill":"歌神"}';// 字符串转化为 php对象print_r(json_decode($jsonStr));​echo "<br>";// php数组$arrayName = array('name' =>'littleFox' ,'age' => 13 );// php对象 转化为 json字符串print_r(json_encode($arrayName));?>

输出结果:

     stdClass Object ( [name] => itcast [age] => 54 [skill] => 歌神 ){"name":"littleFox","age":13}​

ajax 请求解析 json(举例)

(1)Person.json:

 {"name": "小强","skill": "砍树","friend": "老板"}

(2)myJson.php:

 <?php​// 读取json文件 并返回即可echo  file_get_contents('info/Person.json');​?>

(3)getJson.html:

 
<!DOCTYPE html><html lang="en"><head><meta charset="UTF-8" /><title>Document</title></head><body><h1>获取 json 数据</h1><input type="button" value="获取json" id="btnJson" /></body></html><script type="text/javascript">// 获取的是一个 如果要获取多个// document.querySelectorAll(selector)document.querySelector('#btnJson').onclick = function () {var ajax = new XMLHttpRequest();​ajax.open('get', 'myJson.php');​ajax.send();​ajax.onreadystatechange = function () {if (ajax.readyState == 4 && ajax.status == 200) {// json 字符串 是字符串 所以我们可以 通过  responseText获取console.log(ajax.responseText);​// 转化为 js对象var jsObj = JSON.parse(ajax.responseText);​console.log(jsObj);​// 拼接ul svar str = '';​str += '<ul>';str += '<li>' + jsObj.name + '</li>';str += '<li>' + jsObj.skill + '</li>';str += '<li>' + jsObj.friend + '</li>';str += '</ul>';​// 设置到界面上​document.body.innerHTML = str;}};};</script>

演示效果:

Ajax 传输 XML

XML 语法

XML(Extensible Markup Language):可扩展标记语言。详细语法可以查看:#。

1、XML 声明:

 <?xml version="1.0" encoding="UTF-8"?>

第一行的声明,指定了 XML 版本(1.0)以及使用的编码。

2、自定义标签:

XML 中没有默认的标签,所有的标签都是我们自己已定义的。例如:

 <fox></fox><name></name>

XML 中没有单标签,都是双标签。

3、根节点:

XML 中必须要有一个根节点,所有的子节点都放置在根节点下。例如:

 <root1><name></name></root1>

XML 解析

因为 XML 就是标签,所以我们可以直接用解析 Dom 元素的方法解析 XML。

解析过程:

(1)html 部分:(包含 xml )

 <!DOCTYPE html><html lang="en"><head><meta charset="UTF-8" /><title>Document</title></head><body><person id="personXML"><name>fox</name><age>18</age><skill>小花花</skill></person></body></html>

(2)解析 xml:

 <script type="text/javascript">var xmlObj = document.getElementById('personXML');var name = xmlObj.getElementsByTagName('name')[0].innerHTML;​console.log(name);</script>

ajax 请求解析 xml(举例)

(1)get_xml.php:(里面包含了 xml 文件)

 <?php// 设置 返回的为 xmlheader('content-type:text/xml; charset= utf-8');​// 读取xml文件 并返回echo file_get_contents('info/star.xml');​?>

上方代码解释:

  • php 自带了 读取 xml 文件的方法。

  • 在 php 中,如果要使用 xml 传输数据,则需要使用 header()设置返回的内容为 xml。

(2)get_xml.html:(Ajax 请求,获取并解析 xml)

 <!DOCTYPE html><html lang="en"><head><meta charset="UTF-8" /><title>Document</title></head><body><input type="button" value="获取XMl数据" id="getXML" /></body></html><script type="text/javascript">document.querySelector('#getXML').onclick = function () {var ajax = new XMLHttpRequest();​ajax.open('get', 'get_XMl.php');​ajax.send();​ajax.onreadystatechange = function () {if (ajax.readyState == 4 && ajax.status == 200) {// 如果 返回的是 xml文件console.log(ajax.responseText);​// 异步 对象中 有另外一个属性 用来专门获取 xml// xml对象 在浏览器段 就是一个 document对象// 解析时 可以直接使用 querySelector 或者 getElementById等等 document对象 有的语法console.log(ajax.responseXML);console.log(ajax.responseXML.querySelector('kuzi').innerHTML);// 下面这个 页面文档对象 如果要获取某个标签console.log(window.document);}};};</script>

希望各位可以点个赞点个关注,这对up真的很重要,谢谢大家啦!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/7773.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

远程桌面连接不上,远程桌面连接不上的专业解决策略

在信息技术领域&#xff0c;远程桌面连接是一种非常重要的工具&#xff0c;它允许用户从任何地点、任何时间访问和操作远程计算机。然而&#xff0c;当远程桌面连接出现问题时&#xff0c;可能会严重影响工作效率。以下是一些可能导致远程桌面连接不上的原因以及相应的解决方案…

Verilog刷题笔记47

题目&#xff1a; From a 1000 Hz clock, derive a 1 Hz signal, called OneHertz, that could be used to drive an Enable signal for a set of hour/minute/second counters to create a digital wall clock. Since we want the clock to count once per second, the OneHer…

普洱茶泡多少茶叶才算淡茶?

普洱茶淡茶一般放几克茶叶&#xff0c;品深茶官网根据多年专业研究与实践结果&#xff0c;制定了淡茶冲泡标准。在冲泡普洱茶淡茶时&#xff0c;茶叶的投放量是关键因素之一。淡茶冲泡标准旨在保持茶汤的清爽口感&#xff0c;同时充分展现普洱茶的独特风味。 根据《品深淡茶冲…

AMEYA360详解:蔡司利用纳米探针技术探索半导体微观电学性能

半导体器件尺寸不断缩小和复杂度增加&#xff0c;纳米探针(Nanoprobing)技术成为解决微观电学问题和优化器件性能的重要工具&#xff0c;成为半导体失效分析流程中越来越重要的一环。 随着功率半导体的快速发展&#xff0c;其厂商也开始密切关注纳米探针技术在PN结特性分析和掺…

下载后端返回的二进制文件

目录 一、问题 二、解决方法 三、总结 tiips:如嫌繁琐&#xff0c;直接移步总结即可&#xff01; 一、问题 1.需要导出功能&#xff0c;后端已经返回了二进制文件&#xff0c;前端如何下载呢&#xff1f; 二、解决方法 1.数据类型转换&#xff1a;将后端的二进制数据转换…

LeetCode题练习与总结:合并两个有序数组--88

一、题目描述 给你两个按 非递减顺序 排列的整数数组 nums1 和 nums2&#xff0c;另有两个整数 m 和 n &#xff0c;分别表示 nums1 和 nums2 中的元素数目。 请你 合并 nums2 到 nums1 中&#xff0c;使合并后的数组同样按 非递减顺序 排列。 注意&#xff1a;最终&#xf…

js宏任务微任务输出解析

第一种情况 setTimeout(function () {console.log(setTimeout 1) //11 宏任务new Promise(function (resolve) {console.log(promise 1) //12 同步函数resolve()}).then(function () {console.log(promise then) //13 微任务})})async function async1() {console.log(async1 s…

贪吃蛇大作战(C语言--实战项目)

朋友们&#xff01;好久不见。经过一段时间的沉淀&#xff0c;我这篇文章来和大家分享贪吃蛇大作战这个游戏是怎么实现的。 &#xff08;一&#xff09;.贪吃蛇背景了解及效果展示 首先相信贪吃蛇游戏绝对称的上是我们00后的童年&#xff0c;不仅是贪吃蛇还有俄罗斯⽅块&…

持续总结中!2024年面试必问 100 道 Java基础面试题(三十四)

上一篇地址&#xff1a;持续总结中&#xff01;2024年面试必问 100 道 Java基础面试题&#xff08;三十三&#xff09;-CSDN博客 六十七、抽象类是否可以实现接口&#xff1f; 抽象类可以实现接口&#xff08;Interface&#xff09;。在Java中&#xff0c;抽象类实现接口是一…

【数据库表的约束】

文章目录 一、NULL vs &#xff08;空字符串&#xff09;二、not null 和default三、列描述字段comment四、zerofill五、primary key 主键总结 一、NULL vs ‘’&#xff08;空字符串&#xff09; NULL和空字符串’’ NULL代表什么都没有。 空字符串’代表有&#xff0c;但串…

纯干货分享|源代码泄露的有效方法

企业的源代码怎么加密&#xff1f; 源代码防泄密的重点和方法到底是怎样的&#xff1f; 源代码开发环境复杂&#xff0c;涉及的开发软件、文件类型庞杂多变&#xff0c;究竟有什么源代码加密软件能够适应众多开发软件而不影响原有的工作效率&#xff1f; 相信这是很多IT管理…

如何用TONGYILingma进行AI辅助编程?

通义灵码&#xff0c;是阿里云出品的一款基于通义大模型的智能编码辅助工具&#xff0c;提供行级/函数级实时续写、自然语言生成代码、单元测试生成、代码优化、注释生成、代码解释、研发智能问答、异常报错排查等能力&#xff0c;并针对阿里云的云服务使用场景调优&#xff0c…

面试笔记——工厂模式(简单工厂、工厂方法模式、抽象工厂模式)

场景需求&#xff1a;设计一个咖啡店点餐系统。 设计一个咖啡类&#xff08;Coffee&#xff09;&#xff0c;并定义其两个子类&#xff08;美式咖啡【AmericanCoffee】和拿铁咖啡【LatteCoffee】&#xff09;&#xff1b;再设计一个咖啡店类&#xff08;CoffeeStore&#xff09…

软件设计师-应用技术-UML建模题3

基础知识及技巧&#xff1a; 1. 用例图&#xff1a; 1.1 考点&#xff1a; 题干里面有关项目的详细描述&#xff0c;完整用例图中的某些参与者和某些用来扣掉&#xff0c;根据题干内容和已有用例图补充。根据题干&#xff0c;分析用例图之间的关系。 1.2 基础知识&#xff…

Linux进程通信-信号

信号概念 信号是 Linux 进程间通信的最古老的方式之一&#xff0c;是事件发生时对进程的通知机制&#xff0c;有时也称之为软件中断&#xff0c;它是在软件层次上对中断机制的一种模拟&#xff0c;是一种异步通信的方式。信号 可以导致一个正在运行的进程被另一个正在运行的异…

通过 Java 操作 redis -- String 基本命令

关于 redis String 类型的相关命令推荐看 Redis - String 字符串 要想通过 Java 操作 redis&#xff0c;首先要连接上 redis 服务器&#xff0c;推荐看通过 Java 操作 redis -- 连接 redis 本博客只介绍了一小部分常用的命令&#xff0c;其他的命令根据上面推荐的博客也能很简单…

Day 63:单调栈 LeedCode 84.柱状图中最大的矩形

84. 柱状图中最大的矩形 给定 n 个非负整数&#xff0c;用来表示柱状图中各个柱子的高度。每个柱子彼此相邻&#xff0c;且宽度为 1 。 求在该柱状图中&#xff0c;能够勾勒出来的矩形的最大面积。 示例 1: 输入&#xff1a;heights [2,1,5,6,2,3] 输出&#xff1a;10 解释&a…

熟悉这些道理可以让人更好地应对各种挑战和困难。

1. 为别人尽最大的力量&#xff0c;最后就是为自己尽最大的力量。——罗斯金 2. 世上有一条永恒不变的法则:当你不在乎&#xff0c;你就得到。当你变好&#xff0c;你才会遇到更好的。只有当你变强大&#xff0c;你才不害怕孤单。当你不害怕孤单&#xff0c;你才能够宁缺毋滥。…

论文精读-基于FPGA的卷积神经网络和视觉Transformer通用加速器

文章目录 论文精读-基于FPGA的卷积神经网络和视觉Transformer通用加速器概述研究背景卷积和注意力机制概述计算方式差异非线性与归一化操作差异 问题小结 加速器设计乘法单元探索非线性与归一化加速单元加速器架构 实验结果QA 论文精读-基于FPGA的卷积神经网络和视觉Transforme…

交易复盘-20240507

仅用于记录当天的市场情况&#xff0c;用于统计交易策略的适用情况&#xff0c;以便程序回测 短线核心&#xff1a;不参与任何级别的调整&#xff0c;采用龙空龙模式 一支股票 10%的时候可以操作&#xff0c; 90%的时间适合空仓等待 蔚蓝生物 (5)|[9:25]|[36187万]|4.86 百合花…