ajax写法和json的知识点

news2024/11/19 11:17:55

1. JQuery方式来实现AJAX

1.1 $.ajax()方式来实现AJAX

语法:$.ajax(url,[settings]);但是我们一般这么写$.ajax({键值对});
$.ajax()来实现ajax的案例:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script src="js/jquery-3.3.1.min.js"></script>
    <script>
        
        //定义方法
        function  fun() {
            //使用$.ajax()发送异步请求.这个$.ajax()的参数可以写很多键值对,我们只需要记住一部分就行了,比如url、type、data、success、error、dataType。
            $.ajax({
                url:"ajaxServlet" , // 请求资源的路径
                type:"POST" , //浏览器请求资源的请求方式。默认是get,即,你不指定type的值是什么,默认就是get方式发送的请求。
                //请求参数。你要携带请求的参数可以用data这个键。data的写法有两种:
                //方式一:要携带多个参数可以用&来连接这几个参数。
                //data: "username=jack&age=23",
                //方式二:多个参数可以用逗号隔开。推荐使用方式二这种写法。
                data:{"username":"jack","age":23},
                //success这个键后面一定是绑定一个函数的。即,响应成功后会自动执行这个function的语句。
                success:function (data) {//这个data是一个变量而已,可以名字可以随便取,它可以接收服务器给的响应的结果的值。
                    alert(data);
                },//记得逗号不要忘记
                //error这个键后面也是绑定一个函数,即响应失败后会自动执行这个function的语句。
                error:function () {
                    alert("出错啦...")
                },
                dataType:"text"//这个键用了设置预期的接收到服务器那边的数据的类型,即浏览器将会用这个格式来解析服务器那边拿到数据。你要是不指定,那么浏览器会根据http的响应头的MIME值来智能判断它从服务器那边拿到的数据类型然后去解析。
                //这个dateType可以写的值有这些:xml、html、script、json、jsonp、text。
            });
        }
        
    </script>
    
    
</head>
<body>

    <input type="button" value="发送异步请求" onclick="fun();">

    <input>
</body>
</html>

1.2 $.get()方式来实现AJAX

注意:这种方式发送的请求将会以post方式发送。
语法:$.post(url, [data], [callback], [type])

这个语法里面的参数:

  • url:请求路径
  • data:请求参数
  • callback:回调函数
  • type:响应结果的类型

下面是用$.post()方式来实现AJAX的案例:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script src="js/jquery-3.3.1.min.js"></script>
    <script>
        
        //定义方法
        function  fun() {
            $.post("ajaxServlet",{username:"rose"},function (data) {
                alert(data);
            },"text");

        }
    </script>
</head>
<body>
    <input type="button" value="发送异步请求" onclick="fun();">

    <input>
</body>
</html>

2. json

2.1 注意点

  • json数据是由键值对构成的
    注意:

    1. 键值对中的键可以用引号(单双都行)引起来,也可以不使用引号
    2. 值可以取的哪些类型:
      • 数字(整数或浮点数,这个可以直接写)
      • 字符串(字符串一定要在双引号中)
      • 逻辑值(可以写true 或 false)
      • 数组(要写在方括号中,比如{“persons”:[{……},{……}]})
      • 对象(要写在花括号中,比如{“address”:{“province”:“陕西”…}})
      • null
  • 数据由逗号分隔:多个键值对之间由逗号分隔

  • 花括号保存对象:花括号长这样{}

  • 方括号保存数组:方括号长这样[]

2.2 获取数据

获取数据的格式有下面这几种:

  1. 获取json对象里的某个键的值
    • json对象.键名。注意:这种方式键名不用带引号。
    • json对象[“键名”]。注意:这种方式的键名需要加引号,单引号和双引号都是可以的。
  2. 获取数组对象中的某个元素
    • 数组对象[索引]

2.3 json写法的案例

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script>
        //1.定义基本格式
        var person = {"name": "张三", age: 23, 'gender': true};

        //获取name的值
        //方式一
        //var name = person.name;
        //方式二
        var name = person["name"];
        alert(name);//张三

        //2.嵌套格式
        //2.1{}嵌套[]
        var persons = {
            "persons11": [
                {"name": "张三", "age": 23, "gender": true},
                {"name": "李四", "age": 24, "gender": true},
                {"name": "王五", "age": 25, "gender": false}
                ]
        };

        //获取王五
        var name1 = persons.persons11[2].name;
        alert(name1);//王五


        //2.2[]嵌套{}
        var ps = [{"name": "张三", "age": 23, "gender": true},
            {"name": "李四", "age": 24, "gender": true},
            {"name": "王五", "age": 25, "gender": false}];//ps这个变量将会是一个数组。
        //获取李四值
        alert(ps[1].name);//李四
    </script>
</head>
<body>

</body>
</html>

2.4 json数据遍历的案例

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script>
        //1.定义基本格式
        var person = {"name": "张三", age: 23, 'gender': true};

        var ps = [{"name": "张三", "age": 23, "gender": true},
            {"name": "李四", "age": 24, "gender": true},
            {"name": "王五", "age": 25, "gender": false}];
        
        //获取person对象中所有的键和值
        //for-in循环来遍历json对象。
        for(var key in person){//不一定叫key也可以叫别的,就是变量名而已,这个变量名表示的是键。
            //alert(key + ":" + person.key);这样写不行,当key为name时,相当于是alert(name + ":" + person."name");这样写。所以我们要像下面这样这句这样写才行。
            alert(key+":"+person[key]);
        }

       //获取ps中的所有值,即遍历数组
        for (var i = 0; i < ps.length; i++) {
            var p = ps[i];//拿到ps这个数组里面的每一个json对象
            for(var key in p){
                alert(key+":"+p[key]);
            }
        }
    </script>
</head>
<body>
</body>
</html>

3. 使用案例

验证用户名是否存在的案例,比如你注册一个账号,如下面这样,你输入了用户名然后鼠标焦点离开了这个用户名这个文本框,右边就给你显示此用户名是否存在的提示。

在这里插入图片描述

我们通过抓包发现百度的注册页面其实是在你鼠标焦点离开了用户名这个文本输入框,就会让浏览器向服务器发送一个请求(可以根据下面这个截图知道,百度离焦事件是去访问它服务器的regnamesugg这个资源的),然后浏览器会解析这个请求的响应信息,再给用户展示。可以看到响应信息是一个json格式的数据,下面还响应了一个图片,就是右边那个小叉叉。

在这里插入图片描述

代码展示:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>注册页面</title>
    <script src="js/jquery-3.3.1.min.js"></script>


    <script>
        //在页面加载完成后
        $(function () {
           //给username绑定blur事件,即绑定失去焦点的事件
           $("#username").blur(function () {
               //获取username文本输入框的值
               var username = $(this).val();//this指的是那个正在失去焦点的那个元素对象
               //发送ajax请求
               $.get("findUserServlet",{username:username},function (data) {//这个值username,指的是前面那个username变量。即键值对的值可以是某个变量。
                   /*
                   期待:
                   1.用户名存在返回一个{"userExist":true,"msg":"此用户名太受欢迎,请更换一个"}
                   2.用户名不存在返回一个{"userExist":false,"msg":"用户名可用"}
                   */
                   //判断userExsit键的值是否是true
                   var span = $("#s_username");
                   if(data.userExist){//data.userExsit就是获取响应的json中的键为userExist的值。我也不知道data是一个什么数据类型的数据,反正data的对应的是一个json的字符串,然后你data可以通过data.XX来拿到这个字符串{}中的这个键的值,注意是{}中的哦。
                       //用户名存在
                       span.css("color","red");
                       span.html(data.msg);
                   }else{
                       //用户名不存在
                       span.css("color","green");
                       span.html(data.msg);
                   }
               },
               "json"
               );
           }); 
        });

    </script>
</head>
<body>


    <form>

        <input type="text" id="username" name="username" placeholder="请输入用户名">
        <span id="s_username"></span>
        <br>
        <input type="password" name="password" placeholder="请输入密码"><br>
        <input type="submit" value="注册"><br>

    </form>

</body>
</html>

关于data的用法补充一点:看下面这个截图的笔记就行了,这个是后面任务的一个例题。注意:下面这个截图红色字体的解释是有误的,这个data其实是一个js对象,就是响应的json字符串对应的js对象,因为那个json对象是[{},{},……],所以是一个js数组对象。所以下面这个遍历不是json对象的一种遍历方式,而是遍历js对象的遍历方式,把js对象转为jq对象,然后遍历。(所以下面这个截图里面的这个解释有点问题,但是我就不改了,不改然后在这里用高亮的字体提出来,就可以让我们注意避免让我们再次走入这个误区了,总之,这里的data获取到的是js对象)。
在这里插入图片描述

package cn.itcast.web.servlet;

import com.fasterxml.jackson.databind.ObjectMapper;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;

@WebServlet("/findUserServlet")
public class FindUserServlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //1.获取用户名
        String username = request.getParameter("username");

        //2.调用service层判断用户名是否存在。这里简化了,没有写service层的代码。

        //期望服务器响应回的数据格式为:
        //如果数据库里面有存在一样的用户名:响应{"userExsit":true,"msg":"此用户名太受欢迎,请更换一个"}这样的json数据
        //如果数据库里面有不存在一样的用户名:响应{"userExsit":false,"msg":"用户名可用"}这样的json数据

        //设置响应的数据格式为json
        response.setContentType("application/json;charset=utf-8");//浏览器默认是会把你写的数据当作字符串去解析,但是你浏览器那边写的解析代码是当作json来解析的,所以你得告诉浏览器你服务器传的资源的格式是json格式的,且是utf-8格式的数据,utf-8是为了避免显示服务器拿到的中文数据到html文档中的时候出现中文乱码问题。
        Map<String,Object> map = new HashMap<String,Object>();

        //就比如说数据库里面已经存在的用户名是tom,那么要是你要注册的用户名是tom那么就给浏览器一个”此用户名太受欢迎,请更换一个“的提示。不存在一样的用户名响应”用户名可用“
        if("tom".equals(username)){
            //存在.
            map.put("userExist",true);
            map.put("msg","此用户名太受欢迎,请更换一个");
        }else{
            //不存在
            map.put("userExist",false);
            map.put("msg","用户名可用");
        }

        //将map转为json,并且传递给客户端
        //将map转为json
        ObjectMapper mapper = new ObjectMapper();
        //传递给客户端
        mapper.writeValue(response.getWriter(),map);//这里我们直接用这个writerValue(Writer,Object)这个方法来写数据到客户端去。response.getWriter()就是获取那个能连接到客户端的那个流对象。
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        this.doPost(request, response);
    }
}

注意:

在这里插入图片描述

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

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

相关文章

consul集群搭建教程 - 多机集群

简言 1. 使用consul单节点有宕机&#xff0c;数据丢失的风险&#xff0c;为了安全&#xff0c;使用consul集群更靠谱 2. consul的各个版本下载地址在 Consul Versions | HashiCorp Releases 3. 本文使用consul的版本是consul1.15.1&#xff0c;所以请下载名字为 consul_1.15…

GitHub开源神器,已获3k star!让你的 ChatGPT 不再报错!感受丝滑般体验!

点击上方“Github爱好者社区”&#xff0c;选择星标 回复“资料”&#xff0c;获取小编整理的一份资料 作者&#xff1a;GG哥 来源&#xff1a;GitHub爱好者社区&#xff08;github_shequ&#xff09; 这是GitHub爱好者社区第 71 篇原创文章 Hello&#xff0c;大家好&#xff0…

基于springboot的大学生租房系统源码论文数据库

3.1系统功能 现在无论是在PC上还是在手机上&#xff0c;相信全国所有地方都在进行大学生租房管理。随着经济的不断发展&#xff0c;系统管理也在不断增多&#xff0c;大学生租房系统就是其中一种&#xff0c;很多人会登录到相关的租房系统查看租房信息&#xff0c;还能查看房屋…

高效提升电池寿命和安全性 | 基于ACM32 MCU的BMS应用方案

电池管理系统&#xff08;BMS&#xff09;通过监控电池的状态&#xff0c;智能化管理及维护各个电池单元&#xff0c;从而防止电池出现过充电和过放电。优质的电池管理系统能够最大限度地延长电池整体使用寿命&#xff0c;有效保障设备安全。 BMS电池管理概述 BMS&#xff0c…

Linux使用Jenkins搭配Gitee自动化部署Vue项目

目录 一、环境准备二、Jenkins配置Node2.1 下载NodeJS插件2.2 配置node 三、新建任务-Vue项目四、配置Nginx 一、环境准备 Jenkins&#xff1a; Node&#xff1a;安装配置教程 建三个软链接&#xff0c;不然Jenkins会找不到 ln -s /usr/local/node-v14.18.2-linux-x64/bin/…

CDH 集成 Flink-1.14.3 过程与踩坑记录

一、资源准备与配置 1.1 项目文件下载与配置 #下载 flink-parcel 项目文件 [roothadoop105 ~]# git clone https://github.com/pkeropen/flink-parcel.git [roothadoop105 ~]# cd flink-parcel/ #编辑下载地址&#xff0c;看自己需求哪个版本 [roothadoop105 flink-parcel]# …

【后续】使用nvm替换nvmw作为nodejs的版本切换(亲测)

文接上篇&#xff0c;使用nvm替换nvmw作为nodejs的版本切换&#xff08;亲测&#xff09; 如图各种乱码&#xff0c;在vscoe中也是出现 真的好烦啊。看到提示的还是之前nvmw不能执行的各种报错。 XXX不是内部或外部命令&#xff0c;也不是可运行的程序或批处理文件。 决定&am…

【编译】JITAOT介绍与优劣

文章目录 JIT优劣 AOT优劣 二者区别来源 AOT 去年发布的 .NET 7 中引入了该功能&#xff0c;只是在 .NET 8 中进一步进行了改进。新版本中通过 Native AOT 发布的“Hello, World”应用程序体积进一步缩小&#xff0c;只有 .NET 7 的一半。 以 CoreCLR 为例&#xff0c;不做 AOT…

Linux进程信号(上)

目录 一&#xff1a;信号引入 二&#xff1a;信号保存方式 三&#xff1a;信号处理方式 四&#xff1a;查看Linux信号 五&#xff1a;信号捕捉 六&#xff1a;信号产生 一&#xff1a;终端按键产生信号 二&#xff1a;系统函数产生信号 2.1:kill&#xff08;&#xff…

安全测试:配置管理潜在威胁

一、配置管理威胁有哪些 明文信息传输漏洞敏感信息泄露默认或可猜解用户账户会话重放攻击测试验证码缺陷http方法测试 二、明文信息传输和存储漏洞 漏洞描述&#xff1a; 页面中没有对传输的用户名和密码等敏感信息进行加密后传输。用户密码后台存储是否加密。 产生原因&a…

MySQL安装版步骤

百度网盘有安装版、解压包安装包以及visual插件 链接&#xff1a;https://pan.baidu.com/s/1XXvWa40FYX5mtqofW_knIg 提取码&#xff1a;ky2q 下载地址https://downloads.mysql.com/archives/installer/ 双击下载好的exe文件&#xff0c;选择Custom自定义安装&#xff0c;点…

内联函数-取决于编译器

内联函数 以inline修饰的函数叫做内联函数&#xff0c;编译时C编译器会在调用内联函数的地方展开&#xff0c;没有函数调用建立栈帧的开销&#xff0c;内联函数提升程序运行的效率。 内联函数完美解决了宏函数上述所以缺点&#xff0c;但是不是所有函数都要搞成内联函数&#…

CentOS7(一)安装和基础配置

文章目录 一、CentOs 7 下载与安装二、安装过程三、安装Ohmyzsh1、基础软件安装2、编辑 install.sh4、修改仓库地址5、修改shell6、编辑主题和插件7、刷新配置8、创建用户级别配置文件 四、研发环境配置四、centos不能访问github&#xff0c;速度慢五、防火墙相关六、wget 下载…

Scala中的Map 集合详解

目录 一、不可变长Map集合 1.map的声明与遍历 2.map的常用方法&#xff1a;get、getOrElse、keys、values、、&#xff1a; 二、可变长Map集合 三、Map的其他方法 key -> value 的语法形式实际上是用库中的隐式转换实现的&#xff0c;实际调用了 Map.apply 方法。Map.a…

多维时序 | MATLAB实现BO-CNN-LSTM贝叶斯优化卷积神经网络-长短期记忆网络多变量时间序列预测

多维时序 | MATLAB实现BO-CNN-LSTM贝叶斯优化卷积神经网络-长短期记忆网络多变量时间序列预测 目录 多维时序 | MATLAB实现BO-CNN-LSTM贝叶斯优化卷积神经网络-长短期记忆网络多变量时间序列预测效果一览基本介绍模型搭建程序设计参考资料 效果一览 基本介绍 MATLAB实现BO-CNN-…

我看谁没看过

vue在新窗口打开页面方法 const { href } this.$router.resolve({path: "/officePlatform/addPrompt"});window.open(href, "_blank"); 添加圆形标志 h3::before {content: "";display: inline-block;width: 13px;height: 13px;background: va…

易点易动设备管理平台帮助化工企业实现设备高效管理

在现代化工企业中&#xff0c;设备管理和能耗监控是至关重要的。易点易动设备管理平台通过整合设备台账、巡检、维修、保养、备件管理、设备监控和能耗监控功能&#xff0c;为化工企业提供了一套全面、高效的解决方案。本文将详细介绍易点易动设备管理平台如何帮助化工企业实现…

JVM字节码分析

文章目录 1、类文件结构1.1、 魔数1.2、 版本1.3 、常量池1.4、 访问标识与继承信息1.5、 Field 信息1.6、 Method 信息1.7 、附加属性 2、字节码指令2.1、javap工具2.2、图解方法执行流程2.2.1 常量池载入运行时常量池2.2.2 方法字节码载入方法区2.2.3 main线程开始运行&#…

windows下另一种傻瓜式从零部署cuda环境的方式

前言 最近因为连续部署了两个深度学习环境&#xff0c;实在嫌烦了&#xff0c;于是摸索出一条简便的方式希望让人人都可以傻瓜式的快速部署&#xff0c;首先确保你的硬盘具有20G以上的空间&#xff0c;这里以部署torch的gpu版和让onnxruntime使用cuda加速为例&#xff0c;让我…

PDF.js源码使用总结

1、官网地址 pdf.js官网&#xff08;http://mozilla.github.io/pdf.js/&#xff09; pdf.js源码&#xff08;https://github.com/mozilla/pdf.js&#xff09; 版本选择&#xff1a;点击Tags 2、选择对应版本zip包下载、解压 在进行npm install之前 (注意&#xff1a;node.js…