Layui之JSON&Ajax

1.JSON

1.1.什么是JSON

JSON 全称“JavaScript Object Notation”,译为“JavaScript 对象简谱”或“JavaScript 对象表示法”,是一种轻量级的、基于文本的、开放的数据交换格式。JSON 在 Web 开发领域有着举足轻重的地位,如果您想在 Web 开发领域大展身手的话,就必须了解 JSON。

数据交换是指,两个设备之间建立连接并互相传递数据的过程。

尽管 JSON 的名称中包含“JavaScript”,但它并不是只能在 JavaScript 中使用,大多数编程语言都支持 JSON(有些本身就支持,有些可以通过第三方库得到支持),例如 JavaScript、Java、PHP、Python、C++ 等。

JSON 是一种纯字符串形式的数据,它本身不提供任何方法(函数),非常适合在网络中进行传输。JavaScript、PHP、Java、Python、C++ 等编程语言中都内置了处理 JSON 数据的方法。

JSON 是基于 JavaScript(Standard ECMA-262 3rd Edition - December 1999)的一个子集,是一种开放的、轻量级的数据交换格式,采用独立于编程语言的文本格式来存储和表示数据,易于程序员阅读与编写,同时也易于计算机解析和生成,通常用于在 Web 客户端(浏览器)与 Web 服务器端之间传递数据。

1.2.为什么需要JSON

JSON 并不是唯一能够实现在互联网中传输数据的方式,除此之外还有一种 XML 格式。JSON 和 XML 能够执行许多相同的任务,那么我们为什么要使用 JSON,而不是 XML 呢?

之所以使用 JSON,最主要的原因是 JavaScript。众所周知,JavaScript 是 Web 开发中不可或缺的技术之一,而 JSON 是基于 JavaScript 的一个子集,JavaScript 默认就支持 JSON,而且只要您学会了 JavaScript,就可以轻松地使用 JSON,不需要学习额外的知识。

另一个原因是 JSON 比 XML 的可读性更高,而且 JSON 更加简洁,更容易理解。

与 XML 相比,JSON 具有以下优点:

  • 结构简单、紧凑:与 XML 相比,JSON 遵循简单、紧凑的风格,有利于程序员编辑和阅读,而 XML 相对比较复杂;

  • 更快:JSON 的解析速度比 XML 更快(因为 XML 与 HTML 很像,在解析大型 XML 文件时需要消耗额外的内存),存储同样的数据,JSON 格式所占的存储空间更小;

  • 可读性高:JSON 的结构有利于程序员阅读。

1.3.JSON的不足

任何事物都不可能十全十美,JSON 也不例外,比如:

  • 只有一种数字类型:JSON 中只支持 IEEE-754 双精度浮点格式,因此您无法使用 JSON 来存储许多编程语言中多样化的数字类型;

  • 没有日期类型:在 JSON 中您只能通过日期的字符串(例如:1970-01-01)或者时间戳(例如:1632366361)来表示日期;

  • 没有注释:在 JSON 中无法添加注释;

  • 冗长:虽然 JSON 比 XML 更加简洁,但它并不是最简洁的数据交换格式,对于数据量庞大或用途特殊的服务,您需要使用更加高效的数据格式。

1.4.JSON语法规则

1.4.1.Object(对象)

Object(对象):键/值对(名称/值)的集合,使用花括号{ }定义。在每个键/值对中,以键开头,后跟一个冒号:,最后是值。多个键/值对之间使用逗号,分隔。

{
    "website":{
        "Name":"zking",
        "Url":"https://www.veryedu.cn/",
        "Address":"湖南长沙"
    }
}

注意:所有 JSON 数据需要包裹在一个花括号中,类似于 JavaScript 中的对象。

1.4.2.Array(数组)

Array(数组):值的有序集合,使用方括号[ ]定义,数组中每个值之间使用逗号,进行分隔。

{
    "array":[
        {
            "name":"zking",
            "url":"https://www.veryedu.cn/",
            "course":"JSON"
        },
        [
            "Java",
            "C#",
            "Python"
        ],
        "JSON",
        18,
        true
    ]
}

JSON 中数组与对象不同,对象是由若干键/值对组成,而数组则是由若干值构成的。数组中的值可以是 JSON 中的任意类型。

注意:所有 JSON 数据需要包裹在一个花括号中,类似于 JavaScript 中的对象。

1.4.3.JSON中的键

JSON 数据是以键/值对(名称/值)的形式书写的,键表示数据的名称,需要以字符串的形式定义(在双引号中定义),后面紧跟一个冒号,最后是值,如下例所示:

"name":"Zking"

类似于 JavaScript 对象中的:

name:"Zking"

1.4.4.JSON中的值

JSON 中的值可以是以下数据类型:

  • 数字(整数或浮点数);

  • 字符串(需要在双引号中定义);

  • 布尔值(true 或 false);

  • 数组(在方括号中定义);

  • 对象(在花括号中定义);

  • null(空)。

另外,在 JSON 中,不同的键/值对之间需要使用逗号进行分隔,如下例所示:

{
    "number":200,
    "float":3.14,
    "string":"hello zking",
    "boolean":true,
    "array":[
        "zhangsan",
        {"name":"lisi", "age": 18},
        {"name":"wangwu", "age": 16}
    ],
    "object":{
        "name":"zking",
        "url":"https://www.veryedu.cn/"
    }
}

在使用 JSON 时,有以下几点需要注意:

  • JSON 是一段包裹在花括号中的数据,数据由若干键/值对组成;

  • 键和值之间使用冒号分隔;

  • 不同的键/值对之间使用逗号分隔;

  • 键需要以字符串的形式定义(即使用双引号包裹,注意:不能使用单引号);

  • 值可以是数字、字符串、布尔值、数组、对象、null;

  • 键必须是唯一的,不能重复,否则后定义的键/值对会覆盖前面定义的键/值对;

  • JSON 中不可以使用八进制或十六进制表示数字。

1.5.JSON与JavaScript对象的区别

粗略的看起来,您可能觉得 JSON 就是一个 JavaScript 的对象,但其实不是这样的,JSON 与 JavaScript 对象之间还是有区别的。首先,JSON 是一种数据交换格式,可以跨语言、跨平台使用,它只是与 JavaScript 有些渊源,并不是 JavaScript 的一部分。

就语法而言,JSON 与 JavaScript 最主要的区别就是,JSON 中每个键都必须是一个字符串,而 JavaScript 对象则没有这个限制,如下所示:

// JavaScript 中的对象
{
    name: "zking"
}
​
// JSON
{
    "name": "zking"
}

另外,在 JavaScript 对象中,您既可以使用双引号也可以使用单引号,但在 JSON 中只能使用双引号。还有就是 JSON 中没有日期类型,也不能定义注释,所以您只能通过日期的字符串(例如:1970-01-01)或者时间戳(例如:1632366361)来表示日期。

2.Ajax

2.1.jQuery.ajax

ajax() 方法用于执行 AJAX(异步 HTTP)请求。语法:

$.ajax({name:value, name:value, ... })

参数说明:

名称值/描述
async布尔值,表示请求是否异步处理。默认是 true。
beforeSend(xhr)发送请求前运行的函数。
cache布尔值,表示浏览器是否缓存被请求页面。默认是 true。
complete(xhr,status)请求完成时运行的函数(在请求成功或失败之后均调用,即在 success 和 error 函数之后)。
contentType发送数据到服务器时所使用的内容类型。默认是:"application/x-www-form-urlencoded"。
context为所有 AJAX 相关的回调函数规定 "this" 值。
data规定要发送到服务器的数据。
dataFilter(data,type)用于处理 XMLHttpRequest 原始响应数据的函数。
dataType预期的服务器响应的数据类型。
error(xhr,status,error)如果请求失败要运行的函数。
global布尔值,规定是否为请求触发全局 AJAX 事件处理程序。默认是 true。
ifModified布尔值,规定是否仅在最后一次请求以来响应发生改变时才请求成功。默认是 false。
jsonp在一个 jsonp 中重写回调函数的字符串。
jsonpCallback在一个 jsonp 中规定回调函数的名称。
password规定在 HTTP 访问认证请求中使用的密码。
processData布尔值,规定通过请求发送的数据是否转换为查询字符串。默认是 true。
scriptCharset规定请求的字符集。
success(result,status,xhr)当请求成功时运行的函数。
timeout设置本地的请求超时时间(以毫秒计)。
traditional布尔值,规定是否使用参数序列化的传统样式。
type规定请求的类型(GET 或 POST)。
url规定发送请求的 URL。默认是当前页面。
username规定在 HTTP 访问认证请求中使用的用户名。
xhr用于创建 XMLHttpRequest 对象的函数。

2.2.AJAX get() 和 post()

HTTP 请求:GET vs POST

两种在客户端和服务器端进行请求-响应的常用方法是:GET 和 POST。

  • GET - 从指定的资源请求数据

  • POST - 向指定的资源提交要处理的数据

GET 基本上用于从服务器获得(取回)数据。注释:GET 方法可能返回缓存数据。

POST 也可用于从服务器获取数据。不过,POST 方法不会缓存数据,并且常用于连同请求一起发送数据。

2.2.1.jQuery.get

$.get() 方法通过 HTTP GET 请求从服务器上请求数据。语法:

$.get(URL,callback);
或
$.get( URL [, data ] [, callback ] [, dataType ] )
  • URL:发送请求的 URL字符串。

  • data:可选的,发送给服务器的字符串或 key/value 键值对。

  • callback:可选的,请求成功后执行的回调函数。

  • dataType:可选的,从服务器返回的数据类型。默认:智能猜测(可以是xml, json, script, 或 html)。

2.2.2.jQuery.getJSON

$.getJSON( )方法函数主要用来从服务器加载json编码的数据,它使用的是GET HTTP请求。语法:

$.getJSON( URL [, data ] [, callback ] )
  • URL:发送请求的 URL字符串。

  • data:可选的,发送给服务器的字符串或 key/value 键值对。

  • callback:可选的,请求成功后执行的回调函数。

2.2.3.jQuery.post

$.post() 方法通过 HTTP POST 请求向服务器提交数据。语法:

$.post(URL,callback);
或
$.post( URL [, data ] [, callback ] [, dataType ] )
  • URL:发送请求的 URL字符串。

  • data:可选的,发送给服务器的字符串或 key/value 键值对。

  • callback:可选的,请求成功后执行的回调函数。

  • dataType:可选的,从服务器返回的数据类型。默认:智能猜测(可以是xml, json, script, 或 html)。

  • 7
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
实现用户登录,需要以下步骤: 1. 定义前端界面,使用layui搭建用户登录表单,包括用户名和密码的输入框,以及提交按钮。 2. 在后端使用Spring Boot框架搭建RESTful API接口,接收前端传来的用户名和密码,进行登录验证,返回登录结果。 3. 定义用户实体类,映射数据库表。 4. 使用MyBatis操作数据库,实现用户登录验证。 5. 将用户登录结果封装成Json格式,通过Ajax异步请求返回给前端界面。 以下是实现代码: 前端界面: ```html <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>用户登录</title> <link href="https://cdn.jsdelivr.net/npm/layui@2.5.6/dist/css/layui.css" rel="stylesheet"> </head> <body> <div class="layui-container"> <div class="layui-row"> <div class="layui-col-md3"></div> <div class="layui-col-md6" style="margin-top: 20px"> <form class="layui-form"> <div class="layui-form-item"> <label class="layui-form-label">用户名</label> <div class="layui-input-inline"> <input type="text" name="username" required lay-verify="required" placeholder="请输入用户名" autocomplete="off" class="layui-input"> </div> </div> <div class="layui-form-item"> <label class="layui-form-label">密码</label> <div class="layui-input-inline"> <input type="password" name="password" required lay-verify="required" placeholder="请输入密码" autocomplete="off" class="layui-input"> </div> </div> <div class="layui-form-item"> <button class="layui-btn" lay-submit lay-filter="login" style="width:100%;">登录</button> </div> </form> </div> <div class="layui-col-md3"></div> </div> </div> <script src="https://cdn.jsdelivr.net/npm/layui@2.5.6/dist/layui.js"></script> <script> layui.use(['form', 'element'], function () { var form = layui.form var element = layui.element //监听提交 form.on('submit(login)', function (data) { $.ajax({ url: "/user/login", type: "POST", data: { username: data.field.username, password: data.field.password }, success: function (result) { if (result.code == 200) { alert(result.msg) //登录成功后跳转到其他页面 window.location.href = "/user/index"; } else { alert(result.msg) } }, error: function () { alert("服务器错误") } }); return false; }); }); </script> </body> </html> ``` 后端接口: ```java @RestController @RequestMapping("/user") public class UserController { @Autowired private UserService userService; /** * 登录验证接口 */ @PostMapping("/login") public Result login(String username, String password) { //调用服务层进行登录验证 User user = userService.login(username, password); if (user == null) { return Result.fail("用户名或密码错误"); } else { return Result.success("登录成功"); } } } ``` 用户实体类: ```java @Data public class User { private Integer id; private String username; private String password; } ``` 数据库操作类 ```java @Mapper public interface UserMapper { User getUserByUsername(String username); } ``` 用户服务类: ```java @Service public class UserService { @Autowired private UserMapper userMapper; /** * 登录验证 */ public User login(String username, String password) { User user = userMapper.getUserByUsername(username); if (user == null) { return null; } if (!user.getPassword().equals(password)) { return null; } return user; } } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值