AJAX和JSON

news2025/1/19 6:59:38

1、什么是AJAX? 

AJAX(ASynchronous JavaScript And XML)异步的JavaScript 和 XML;

由Jesse James Garrett 在他的文章AJAX:A New Approoch to Web Applications中首次提出。

ajax(Web数据交互方式)_百度百科

  1. 使用XHTML+CSS 来看表示信息。
  2. 使用 JavaScript 操作 D OM 进行动态显示及交互。
  3. 使用 XML 和 XSLT 进行数据交互及相关操作。
  4. 使用 XMLHttpRequest对象与 Web 服务器进行异步数据交换。
  5. 使用 JavaScript 将所有的东西绑定在一起。  

2、为什么使用AJAX?

使用AJAX可以带来的好处有以下几个方面。    

(1)减轻服务器的负担。AJAX 的原贝则是“按需取数据”,可以最大限度地减少冗余请求,减轻服务器的负担。

(2)无须刷新页面,减少用户    实际的等待时间。特别是在读取大量数据时,不会    
像刷新页面那样出现白屏的情况。    AJAX使用XMLHttpRequest对象发送请求并且得    
到服务器响应,在不重新载入整个个页面的情况下,用 JavaScript操作 DOM 更新页面。因此在读取数据的过程中,用户所听面对的不是白屏,而是原来的页面内容,只有在数据接收完毕之后才更新相应部分的的内容。这种更新是瞬间的,用户几乎感觉不到。

(3)可以把以前一些服务器负担的工作转移到客户端,利用客户端闲置的能力来处理,减轻服务器负担,充分利用带宽资源,节约空间和宽带租用成本。

(4)AJAX技术是基于标准化的并被广泛支持的技术,不需要装载插件或者小程序。

3、AJAX技术的组成要素

1.JavaScript脚本

2.XML

3.XMLHttpRequest数据交换对象

4.DOM文档对象

4、AJAX异步技术的实现步骤

1.创建异步调用对象

2.加载数据所在的服务器

3.异步调用服务器状态的变化

4.发出一个HTTP请求

5.处理异步获取的数据

5、AJAX与JSON的使用

AJAX异步请求

异步和同步

前提:客户端和服务器端相互通信的基础上

  • 同步:客户端必须等待服务器端的响应。在等待的期间客户端不能做其他操作
  • 异步:客户端不需要等待服务器端的响应。在服务器处理请求的过程中,客户端可以进行其他的操作。

新建一个Module项目、数据库和表,导入jar包和jQuery类库,创建SSM架构和三层架构

异步校验

1.设置输入框的失去焦点事件

2.获取输入框输入的数据

3.执行ajax请求,发送给后端数据

4.后端获取数据并执行处理,做出响应---根据用户名查询是否存在该用户信息

5.前端获取响应数据进行判断和处理

  login.jsp页面

<script>
        //==异步校验
        $(function () {
            //1.设置输入框的失去焦点事件
            $("#uname").blur(function(){
                //2.获取输入框输入的数据
                var uname = $("#uname").val();
                //3.执行ajax请求,发送给后端数据
                $.ajax({
                    url:"findByName",
                    type:"post",
                    data:{"uname":uname},
                    dataType:"json",
                    success:function (response){
                        //5.前端获取响应数据进行判断和处理
                        if(response.userExists==1){
                            $("#tips").text(response.msg);
                            $("#tips").css("color","green");
                        }else{
                            $("#tips").text(response.msg);
                            $("#tips").css("color","red");
                        }
                    }
                });
            });
        });
    </script>

 UserController类

@RequestMapping("findByName")
    @ResponseBody
    public Map<String,Object> findByName(String uname){
        Map<String,Object> map = new HashMap<>();
        //4.后端获取数据并执行处理,做出响应---根据用户名查询是否存在该用户信息
        User user = userService.selectByName(uname);
        if(user!=null){
            map.put("userExists",1);
            map.put("msg","用户名可用");
        }else{
            map.put("userExists",0);
            map.put("msg","用户名不存在");
        }
        return map;
    }

 效果展示

异步登录

1.设置按钮的点击事件

2.获取用户名和密码输入框输入的数据

3.执行ajax请求,发送给后端数据

4.后端获取数据并执行处理,做出响应---根据用户名查询是否存在该用户信息

5.前端获取响应数据进行判断和处理

 login.jsp页面

   <script>
        //==异步校验
        $(function () {        
            //==异步登录
            //1.设置按钮的点击事件
            $("#login").click(function () {
                //2.获取用户名和密码输入框输入的数据
                var uname = $("#uname").val();
                var pwd = $("#pwd").val();
                //3.执行ajax请求,发送给后端数据
                $.ajax({
                    url:"login",
                    type:"post",
                    data:{"uname":uname,"pwd":pwd},
                    dataType:"json",
                    success:function (response){
                        //5.前端获取响应数据进行判断和处理
                        if(response.code==1){
                            alert("欢迎"+uname+"登录系统");
                            window.location.href="zhuye.jsp";
                        }else if(response.code==0){
                            alert(response.msg);
                        }else{
                            alert(response.msg);
                        }
                    }
                });
            });
        });
    </script>

 UserController类 

@RequestMapping("/login")
    @ResponseBody
    public Map<String,Object> login(String uname,String pwd){
        Map<String,Object> map = new HashMap<>();
        //4.后端获取数据并执行处理,做出响应---根据用户名查询是否存在该用户信息
        User user = userService.selectByName(uname);
        if(user!=null){
            if(user.getPwd().equals(pwd)){
                map.put("code","1");
                map.put("msg","可以登录");
            }else{
                map.put("code","0");
                map.put("msg","密码错误");
            }
        }else{
            map.put("code","-1");
            map.put("msg","用户名不存在!");
        }
        return map;
    }

异步加载

先跳转到主页,再请求后端获得数据,然后使用jQuery进行动态数据的展示

同步加载:先请求了后端获得数据,然后跳转到主页进行数据展示

zhuye.jsp 

<script>
        $(function(){
            $.ajax({
                url:"findAll",
                type:"get",
                dataType:"json",
                success:function (response){
                    //先在list里面页面元素清空
                    $("#list").empty();
                    //定义变量进行字符串的拼接
                    var dom = "";
                    //4.遍历数组
                    for (var i = 0; i < response.length; i++) {
                        //5.获取data数组的数据
                        var goods = response[i];
                        //6.把该条数据的值取出来拼接成一个tr的信息
                        dom += "<tr>" +
                            "<td><input type='checkbox' class='check'/> </td>" +
                            "<td>" + goods.gid + "</td>" +
                            "<td>" + goods.gname + "</td>" +
                            "<td>" + goods.price + "</td>" +
                            "<td>" + goods.stock + "</td>" +
                            "<td>" + goods.supplier + "</td>" +
                            "<td>" +
                            "<a href='#'>修改</a>&nbsp;&nbsp;" +
                            "<button>删除</button>" +
                            "</td>" +
                            "</tr>";
                    }
                    //7.向list中添加元素
                    $("#list").append(dom);
                }
            });
        });
    </script>

 UserController

@RequestMapping("/findAll")
    @ResponseBody
    public List<Goods> findAll() throws InterruptedException {
        Thread.sleep(5000);
        List<Goods> list = new ArrayList<>();
        Goods g1 = new Goods();
        g1.setGid(1);
        g1.setGname("方便面");
        g1.setPrice(3.5);
        g1.setStock(30);
        g1.setSupplier("白象");

        Goods g2 = new Goods();
        g2.setGid(2);
        g2.setGname("火腿肠");
        g2.setPrice(7.5);
        g2.setStock(20);
        g2.setSupplier("泡面搭档");

        Goods g3 = new Goods();
        g3.setGid(3);
        g3.setGname("牛奶");
        g3.setPrice(4.5);
        g3.setStock(50);
        g3.setSupplier("蒙牛");

        list.add(g1);
        list.add(g2);
        list.add(g3);
        return list;
    }

 效果图

 延迟加载

JSON

1.简介

  • JSON,全称是 JavaScript Object Notation,即 JavaScript对象标记法。
  • JSON是一种轻量级(Light-Meight)、基于文本的(Text-Based)、可读的(Human-Readable)格式。

SON(JavaScript Object Notation,JavaScript对象标记法)是一种轻量级(Light- Weight)、基于文本的(Text-Based)、可读的(Human-Readable)格式。JSON无论对于人还是机器,都是十分便于阅读和书写的,而且相比 XML 其文件更小。JSON格式的创始人声称此格式永远不升级,这就表示该格式具有长时间的稳定性。JSON格式有两个显著的优点:①书写简单,一目了然;②符合 JavaScript 原生语法,可以由解释引擎直接处理,不用另外添加解析代码。JSON 已经成为各大网站交换数据的标准格式,并被写入ECMAScript 5,成为标准的一部分。简单来说,每个 JSON 对象就是一个值,要么是简单类型的值,要么是复合类型的值,但是只能是一个值,不能是两个或更多的值。这就是说,每个JSON 文档只能包含一个值。 

2. JSON 的语法规则

  • 数组(Array)用方括号(“[ ]”)表示。
  • 对象(0bject)用大括号(“{ }”)表示。
  • 名称/值对(name/value)组合成数组和对象。
  • 名称(name)置于双引号中,值(value)有字符串、数值、布尔值、null、对象和数组。
  • 并列的数据之间用逗号(“,”)分隔
     

jQuery  AJAX 的应用

函数以及功能描述

jQuery.ajax()    执行异步HTTP(AJAX)请求

ajaxComplete()    当AJAX 请求完成时注册要调用的处理程序。这是一个AJAX事件

.ajaxError()    当AJAX 请求完成且出现错误时注册要调用的处理程序。这是一个AJAX事件
.ajaxSend()    在AJAX请求发送之前显示一条消息
jQuery.ajaxSetup()    设置将来的AJAX请求的默认值
.ajaxStart()     当首个AJAX请求完成开始时注册要调用的处理程序。这是一个AJAX事件
.ajaxStop()     当所有AJAX请求完成时注册要调用的处理程序。这是一个AJAX事件
.ajaxSuccess()     当AJAX请求成功完成时显示一条消息
jQuery.get()     使用HTTP GET请求从服务器加载数据
jQuerygetJSON()    使用HTTP GET请求从服务器加载JSON编码数据
jQuery.getScript()    使用HTTP GET 请求从服务器加载JavaScript文件,然后执行该文件
.load()     从服务器加载数据,然后把返回的HTML放入匹配元素
jQuery-param()    创建数组或对象的序列化表示,适合在 URL 查询字符串或AJAX请求中使用
jQuery.post()    使用HTTP POST 请求从服务器加载数据
.serialize()    将表单内容序列化为字符串
.serializeArray()    序列化表单元素,返回 JSON 数据结构数据

  • (url)被加载的数据的URL(地址)。
  • (data)发送到服务器的数据的键/值对象。(callback)当数据被加载时,月所执行的函数。
  • (type)被返回的数据的类型(ht tml、xml、json、jasonp、script、text)。
  • (options)完整AJAX请求的所    有键/值对选项。                                                                                                                                                                                                                           

jQuery  AJAX 事件

下面是jQuery 官方给出的完整的 AJAX 事件列表。

  • AJAXStart(全局事件):AJAX请求开始时执行函数。
  • beforeSend(局部事件):AJAX请求发送前执行函数。 AJAXSend(全局事件):AJAX请求发送前执行函数。 success(局部事件):AJAX请求成功时执行函数。
  • AJAXSuccess(全局事件):AJAX请求成功时执行函数。 error(局部事件):AJAX请求发生错误时执行函数。
  • AJAXError(全局事件):AJAX请求发生错误时执行函数。 complete(局部事件):AJAX请求完成时执行函数。
  • AJAXComplete(全局事件):AJAX请求完成时执行函数。 oAJAXStop(全局事件):AJAX请求结束时执行函数。

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

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

相关文章

[深度学习][CenterFusion]关于centerfusion训练注意的要点

我参考博客CenterFusion 项目超详细环境搭建步骤及可视化操作_centernet可视化_上班摸不了鱼的博客-CSDN博客本文引用 CenterFusion: Center-based Radar and Camera Fusion for 3D Object Detection&#xff0c;复现此论文中的代码&#xff0c;互相学习。注意&#xff1a;由于…

电影元素主题:《黑客帝国》中的js加密与解密

在《黑客帝国》中&#xff0c;加密和解密是非常重要的概念。加密是将信息转换为看起来毫无意义的数据&#xff0c;以确保只有拥有解密密钥的人才能读取和理解它。在这篇文章中&#xff0c;我们将探讨如何使用JavaScript进行加密和解密&#xff0c;就像黑客们在电影中所做的那样…

2023-04-27:用go语言重写ffmpeg的remuxing.c示例。

2023-04-27&#xff1a;用go语言重写ffmpeg的remuxing.c示例。 答案2023-04-27&#xff1a; ffmpeg的remuxing.c是一个用于将多媒体文件从一种容器格式转换为另一种容器格式的命令行工具。它可以将音频、视频和字幕等元素从源文件中提取出来&#xff0c;并按照用户指定的方式…

Windows 11 本地 php 开发环境搭建:PHP + Apache + MySQL +VSCode 安装和环境配置

目录 前言1. PHP 的下载、安装和配置1.1 下载 php1.2 安装 php1.3 配置 php 系统变量1.4 配置 php.ini 2. Apache 的下载、安装和配置2.1 下载 Apache2.2 安装 Apache2.3 修改配置 Apache2.4 指定服务端口&#xff08;非必须&#xff09;2.5 配置系统变量2.6 安装服务2.7 启动服…

在Docker上部署SpringBoot项目(纯步骤)

在Docker上部署SpringBoot项目 在学习中发现了部署的时候总是有各种问题,此文章只有操作步骤没有原理解释,只是用来提醒自己部署步骤 部署总共可以分为五步&#xff01; 第一步&#xff1a;将SpringBoot项目打包成jar包 这里使用idea的上maven选项打包&#xff0c;点一下就行。…

seata 1.4.2 安装部署(Linux环境)

Linux安装部署 seata server 1.4.2 下载安装包上传至服务器 1.首先从GitHub拉取seata压缩包 https://github.com/seata/seata/releases/download/v1.4.2/seata-server-1.4.2.zip 下载到本地后上传至服务器 或使用命令拉取 wget https://github.com/seata/seata/release…

java调用百度的接口获取起-止位置的距离

需求:校验收货地址是否超出配送范围 重要: 做该需求的思路就是通过卖家和卖家具体的地址信息,来获取到二者的经纬度, 此时可以使用百度的 "地理编码服务",即可获取对应的经纬度 第二步,就是通过二者的经纬度,按照百度接口的要求,发送,即可获取到包含二者距离的JSON串…

SQL Father - 模拟数据生成器(后端)

SQL Father - 模拟数据生成器&#xff08;后端&#xff09; SQL 之父项目&#xff1a;快速生成 SQL 和模拟数据&#xff0c;大幅提高开发测试效率&#xff01; 前后端全栈项目 By 程序员鱼皮 制作不易&#xff0c;请勿商用和二次售卖&#xff01;&#xff01;&#xff01; 在线…

HAProxy搭建web集群

目录 一、HAProxy简介1.Haproxy应用分析2.HAProxy的主要特性3.HAProxy常用的负载均衡策略4.LVS、Nginx、HAproxy的区别 二、Haproxy搭建 Web 群集1.haproxy 服务器部署2.编译安装 Haproxy3.Haproxy服务器配置4.添加haproxy 系统服务5.节点服务器部署6.启动haproxy服务7.日志定义…

在KylinV10安装DM8、卸载DM8

前言 因为近期&#xff0c;业外和几个朋友想搞点有趣的项目玩玩&#xff0c;既然不以盈利为主&#xff0c;就> 主推国产化&#xff0c;所以这篇记录一下&#xff0c;我在KylinV10安装dm8.写的博客可能有所披露&#xff0c;希望指正。 注意 dm8试用版只有一年试用期&#xff…

10个你从未想过的 ChatGPT 有趣用途

这篇文章向我们展示了ChatGPT的有趣用途&#xff0c;如创作独特的故事、写作协助、模拟对话和游戏等。这些应用展示了ChatGPT的强大功能和灵活性。通过这些有趣的例子&#xff0c;我们可以看到ChatGPT作为一种人工智能技术在生活中的实际应用和潜力。无论是娱乐还是实用&#x…

基于matlab的长短期神经网络lstm的股票预测

目录 背影 摘要 LSTM的基本定义 LSTM实现的步骤 基于长短期神经网络LSTM的股票预测 MATALB编程实现&#xff0c;附有代码&#xff0c;及链接基于matlab编程的的长短期神经网络LSTM的股票价格的预测&#xff0c;基于深度学习神经网络的股票价格预测-深度学习文档类资源-CSDN文库…

基于SpringBoot的线上日志阅读器

软件特点 部署后能通过浏览器查看线上日志。支持Linux、Windows服务器。采用随机读取的方式&#xff0c;支持大文件的读取。支持实时打印新增的日志&#xff08;类终端&#xff09;。支持日志搜索。 使用手册 基本页面 配置路径 配置日志所在的目录&#xff0c;配置后按回车…

new和delete相关知识点

new和delete基本介绍 malloc 和free 是C函数 new和delete是C的运算符 malloc失败是通过返回值和nullptr作比较&#xff1b;而new开辟内存失败&#xff0c;是通过抛出bad_alloc类型的异常来判断的 new不仅可以做内存开辟&#xff0c;还可以做内存初始化操作 malloc和new的区…

一、MyBatis简介:MyBatis历史、MyBatis特性、和其它持久化层技术对比、Mybatis下载依赖包流程

文章目录 一、MyBatis简介1.1 MyBatis历史1.2 MyBatis特性1.3 和其它持久化层技术对比1.4 Mybatis下载依赖包流程 一、MyBatis简介 1.1 MyBatis历史 ​ MyBatis最初是Apache的一个开源项目iBatis, 2010年6月这个项目由Apache Software Foundation迁 移到了Google Code。随着开…

【每日一题】4978:宠物小精灵之收服

目录 一&#xff1a;题目 二&#xff1a;分析 三&#xff1a;代码实现 一&#xff1a;题目 一天&#xff0c;小智和皮卡丘来到了小精灵狩猎场&#xff0c;里面有很多珍贵的野生宠物小精灵。小智也想收服其中的一些小精灵。然而&#xff0c;野生的小精灵并不那么容易被收服…

MySql,

SQL语句分类 DDL&#xff1a;数据定义语句【create 表&#xff0c;库...】DML:数据操作语句【增加insert&#xff0c;修改update&#xff0c;删除delete】DQL&#xff1a;数据查询语句【select】DCL&#xff1a;数据控制语句【管理数据库&#xff1a;比如用户权限grant&#xf…

DITA技巧:图支持热点链接

- 1 - 场景 在文档或者手册中&#xff0c;我们常希望用户点击图上的某个对象自动跳转到这个对象的文字说明。 比如&#xff1a;点击下边爆炸图中的数字&#xff0c;跳转到这个数字指向的零件的说明。 比如&#xff1a;点击下图中的按钮&#xff0c;了解每个按钮的功能。 - 2…

2023增长为王,消费者数字化逆向重构消费企业

2023年对于消费企业来说&#xff0c;最大的主题就是回归增长。据不完全统计&#xff0c;2022年关闭的线下门店超过7400家&#xff0c;倒闭的底商不计其数&#xff0c;很多消费上市企业业绩表现不及预期&#xff0c;新上市企业数量和募资额度均减少…… 自从2015年后电商流量红…

大数据Doris(五):FE 扩缩容

文章目录 FE 扩缩容 一、通过MySQL客户端连接Doris 二、FE Follower扩缩容 1、准备 FE 安装包 2、在 node2 、 node3 上修改 fe.conf 配置文件 3、在 node2 、 node3 上启动 FE 4、添加 FE Follower 到 Doris 集群 三、FE Observer 扩缩容 1、准备 FE 安装包 2、在 n…