DAY10_SpringBoot—SpringMVC重定向和转发RestFul风格JSON格式SSM框架整合Ajax-JQuery

news2024/10/6 20:25:16

目录

  • 1 SpringMVC
    • 1.1 重定向和转发
      • 1.1.1 转发
      • 1.1.2 重定向
      • 1.1.3 转发练习
      • 1.1.4 重定向练习
      • 1.1.5 重定向/转发特点
      • 1.1.6 重定向/转发意义
    • 1.2 RestFul风格
      • 1.2.1 RestFul入门案例
      • 1.2.2 简化业务调用
    • 1.3 JSON
      • 1.3.1 JSON介绍
      • 1.3.2 JSON格式
        • 1.3.2.1 Object格式
        • 1.3.2.2 Array格式
        • 1.3.2.3 嵌套格式
    • 1.4 SpringMVC使用JSON返回数据
      • 1.4.1 意义
      • 1.4.2 @ResponseBody注解
      • 1.4.2 @RestController
  • 2 SpringBoot整合SSM
    • 2.1 创建项目springboot_demo_4
    • 2.2 编辑pom.xml文件
    • 2.2 编辑yml配置文件
    • 2.3 编辑User
    • 2.4 编辑UserMapper
    • 2.5 编辑UserService/UserServiceImpl
    • 2.6 编辑UserController
    • 2.7 编辑userList.html页面
    • 2.8 页面效果展现
    • 2.9 RestFul策略优化
  • 3 jQuery实现数据获取
    • 3.1 业务说明
    • 3.2 jQuery下载
    • 3.3 Ajax介绍
      • 3.3.1 Ajax特点
      • 3.3.2 Ajax异步原理
    • 3.4 关于JS 循环遍历的写法
    • 3.5 编辑页面JS
    • 3.6 编辑UserController
    • 3.7 页面效果调用
    • 3.8 关于常见Ajax种类介绍
      • 3.8.1 带参数的请求
      • 3.8.2 post请求结构
      • 3.8.3 getJSON类型
      • 3.8.4 $.ajax类型
    • 3.9 请求类型说明
      • 3.9.1 get请求
      • 3.9.2 POST

1 SpringMVC

1.1 重定向和转发

1.1.1 转发

由服务器内部进行页面的跳转

一般情况下 SpringMVC内部 以转化为主
在这里插入图片描述

1.1.2 重定向

当用户发起请求时,由服务器返回有效的网址信息.之后由用户再次发起请求的结构
在这里插入图片描述

1.1.3 转发练习

/**
    * 测试转发和重定向
    * 1.准备一个请求 findUser请求
    * 2.要求转发到 findDog请求中
    * 3.关键字   forward: 转发的是一个请求.....
    * 4.特点:    转发时 会携带用户提交的数据,用户浏览器地址不会发生改变
    * 5.转发的意义:
    *      如果直接转向到页面中,如果页面需要额外的参数处理,则没有执行.
    *      如果在该方法中添加业务处理,则方法的耦合性高.不方便后续维护
    *      所以方法应该尽可能松耦合
*/
@RequestMapping("/findUser")
public String findUser(String name) {
    //return 本身就是一个转发
    //return "dog"; 页面耦合性高
    return "forward:/findDog";
}

//需要将name属性返回给页面
@RequestMapping("/findDog")
public String findDog(String name, Model model) {
    System.out.println("动态获取name属性值:" + name);
    model.addAttribute("name", name + "旺旺旺");
    return "dog";
}
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8">
    <title>转发与重定向练习</title>
</head>
<body>
    <h1>我是Dog页面</h1>
    <!--动态获取服务器数据-->
    <h3 th:text="${name}"></h3>
</body>
</html>
  • 运行结果

在这里插入图片描述
在这里插入图片描述

1.1.4 重定向练习

/**
     * 测试重定向
     * 1.准备一个请求 findUser请求
     * 2.要求重定向到 findDog请求中
     * 3.关键字    redirect:多次请求多次响应
     * 4.特点:    重定向时 不会携带用户的数据,用户的浏览器的地址会发生变化
     * 5.重定向的意义:
     * 		实现了内部方法的松耦合
     */
    @RequestMapping("/findUser")
    public String findUser2(String name) {
        return "redirect:/findDog";
    }

    //需要将name属性返回给页面
    @RequestMapping("/findDog")
    public String findDog2(String name, Model model) {
        System.out.println("动态获取name属性值:" + name);
        model.addAttribute("name", name + "旺旺旺");
        return "dog";
    }
  • 运行结果

在这里插入图片描述
在这里插入图片描述

1.1.5 重定向/转发特点

  • 转发 forward
    • 会携带用户提交的数据
    • 用户浏览器的地址不会发生改变
  • 重定向 redirect
    • 由于是多次请求,所以不会携带用户的数据
    • 由于是多次请求,所以用户的浏览器的地址会发生变化

1.1.6 重定向/转发意义

  • 实现了方法内部的松耦合
    • 如果需要携带参数 使用转发
    • 如果一个业务已经完成需要一个新的开始则使用重定向

1.2 RestFul风格

1.2.1 RestFul入门案例

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;

@Controller
public class RestFulController {

    /**
     * 常规get请求:
     * url地址: http://localhost:8090/restFul?id=1&name=tom
     * get请求弊端: 如果参数有多个,则key-value的结构需要多份.
     * RestFul结构:
     *  url地址: http://localhost:8090/restFul/{id}/{name}
     *      1.参数之间使用/分割
     *      2.参数的位置一旦确定,不可更改
     *      3.参数使用{}号的形式进行包裹,并且设定形参
     *      4.在接收参数时,使用特定的注解取值@PathVariable
     *
     * @PathVariable: 参数说明
     *      1.name/value  动态接收形参的数据  如果参数相同则省略不写
     *      2.必填项 required 默认为true
     */
    @RequestMapping("/restFul/{id}/{name}")
    public String restFul(@PathVariable Integer id,@PathVariable String name){
        System.out.println("获取参数:"+id+"|"+name);
        return "success";
    }
}
  • 运行结果

在这里插入图片描述
在这里插入图片描述

1.2.2 简化业务调用

  • 按照常规说明执行增删改查的操作需要多个业务方法
    • 新增用户 /insertUser
    • 修改用户 /updateUser
    • 删除用户 /deleteUser
    • 查询用户 /selectUser

上述的操作在早期这么写没有问题.但是新的请求规范规定应该让请求尽可能变成无状态的请求.(删除动词)

  • 常见请求类型: 1.GET 2.POST 3.PUT 4.DELETE
  • 优化:
    • 新增用户 /user 请求类型: POST
    • 修改用户 /user 请求类型: PUT
    • 删除用户 /user 请求类型: DELETE
    • 查询用户 /user 请求类型: GET

优化注解:

在这里插入图片描述

  • 总结:
    • 利用RestFul 可以简化get请求类型
    • 利用RestFul可以使用无状态的请求,通过不同的请求类型 控制不同的业务逻辑(较为常用)

1.3 JSON

1.3.1 JSON介绍

JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式(字符串)。它使得人们很容易的进行阅读和编写。同时也方便了机器进行解析和生成。

1.3.2 JSON格式

1.3.2.1 Object格式

对象(object) 是一个无序的“‘名称/值’对”集合。一个对象以“{”(左括号)开始,“}”(右括号)结束。每个“名称”后跟一个“:”(冒号);“‘名称/值’ 对”之间使用“,”(逗号)分隔。

在这里插入图片描述

{"key1":"value1","key2":"value2"}
1.3.2.2 Array格式

数组(array) 是值(value)的有序集合。一个数组以“[”(左中括号)开始,“]”(右中括号)结束。值之间使用“,”(逗号)分隔。

在这里插入图片描述

["value1","value2","value3"]
1.3.2.3 嵌套格式

值(value) 可以是双引号括起来的字符串(string)、数值(number)、true、false、 null、对象(object)或者数组(array)。这些结构可以嵌套。

在这里插入图片描述

[true,false,{"id":100,"name":"tomcat","hobbys":["敲代码","玩游戏","找对象",{"username":"admin","password":"123456"}]}]

1.4 SpringMVC使用JSON返回数据

1.4.1 意义

现阶段一般的请求都是前后端分离的方式ajax (jQuery/Axios),一般向服务器请求的数据通常详情下都是采用JSON串的方式返回.

1.4.2 @ResponseBody注解

import com.jt.pojo.User;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

@Controller
public class JSONController {
    /**
     * 需求: 要求根据getJSON的请求,获取User对象的JSON数据.
     * 用法: 如果需要返回JOSN数据则使用注解@ResponseBody
     * 知识点讲解:
     *      返回的对象之后,SpringMVC通过内部API(ObjectMapper)
     *      调用对象的getXXX()方法动态的获取属性和属性值.
     *  演化规则:
     *      getAge() ~~~~~去掉get首字母~~~~~Age()
     *      ~~~~~~首字母小写~~~~~age()~~~~获取属性age
     *      ~~~~~通过getAge() 动态获取属性的值
     *
     *  JSON: {"age": "今年18岁!!!"}
     *  注意事项:
     *      必须添加get/set方法
     */
    @RequestMapping("/getJSON")
    @ResponseBody //返回值就是一个JSON串
    public User getJSON(){
        User user = new User();
        user.setId(1000).setName("JSON测试");
        return user; //不需要执行视图解析器
    }
}
  • 运行结果

在这里插入图片描述

1.4.2 @RestController

在这里插入图片描述

2 SpringBoot整合SSM

  • Spring
  • SpringMVC
  • Mybatis-plus

2.1 创建项目springboot_demo_4

在这里插入图片描述
在这里插入图片描述

2.2 编辑pom.xml文件

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <!--引入父级工程-->
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>3.1.8</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.jt</groupId>
    <artifactId>springboot_demo_4</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>springboot_demo_4</name>
    <description>springboot_demo_4</description>
    <properties>
        <java.version>17</java.version>
    </properties>
    <dependencies>
        <!--引入jdbc包-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-jdbc</artifactId>
        </dependency>
        <!--thymeleaf导入模版工具类-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-thymeleaf</artifactId>
        </dependency>
        <!--SpringMVCjar包文件-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <!--热部署工具-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <scope>runtime</scope>
            <optional>true</optional>
        </dependency>
        <!--lombok插件-->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
        <!--测试包-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <!--引入数据库驱动 -->
        <dependency>
            <groupId>com.mysql</groupId>
            <artifactId>mysql-connector-j</artifactId>
            <scope>runtime</scope>
        </dependency>
        <!--spring整合mybatis-plus -->
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>3.5.5</version>
        </dependency>
    </dependencies>
    <!--负责项目打包部署-->
    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <configuration>
                    <image>
                        <builder>paketobuildpacks/builder-jammy-base:latest</builder>
                    </image>
                    <excludes>
                        <exclude>
                            <groupId>org.projectlombok</groupId>
                            <artifactId>lombok</artifactId>
                        </exclude>
                    </excludes>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>

2.2 编辑yml配置文件

server:
  port: 8090

spring:
  datasource:
    url: jdbc:mysql://127.0.0.1:3306/jtadmin?serverTimezone=GMT%2B8&useUnicode=true&characterEncoding=utf8&autoReconnect=true&allowMultiQueries=true
    username: root
    password: root

  #整合SpringMVC
  thymeleaf:
    #设置页面前缀
    prefix: classpath:/templates/
    #设置页面后缀
    suffix: .html
    #是否使用缓存
    cache: false

mybatis-plus:
  type-aliases-package: com.jt.pojo
  mapper-locations: classpath:/mappers/*.xml
  #开启驼峰映射
  configuration:
    map-underscore-to-camel-case: true

#添加MP日志  打印执行的sql
logging:
  level:
    com.jt.mapper: debug

2.3 编辑User

import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import lombok.experimental.Accessors;

import java.io.Serializable;

@Data
@Accessors(chain = true)
@TableName("demo_user")  //保证数据安全性和有效性必须序列化
public class User implements Serializable {
    @TableId(type = IdType.AUTO) //主键自增
    private Integer id;
    private String name;
    private Integer age;
    private String sex;
}

2.4 编辑UserMapper

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.jt.pojo.User;

public interface UserMapper extends BaseMapper<User> {

}

2.5 编辑UserService/UserServiceImpl

import com.jt.pojo.User;
import java.util.List;

public interface UserService {
    List<User> findAll();
}
import com.jt.mapper.UserMapper;
import com.jt.pojo.User;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

@Service
public class UserServiceImpl implements UserService{
    @Autowired
    private UserMapper userMapper;

    @Override
    public List<User> findAll() {
        return userMapper.selectList(null);
    }
}

2.6 编辑UserController

/**
 * 查询所有的用户列表数据,在userList.html中展现数据
 */
@RequestMapping("/userList")
public String userList(Model model){
    //1.查询业务层获取数据
    List<User> userList = userService.findAll();
    //2.将数据保存到Model对象中返回给页面
    model.addAttribute("userList",userList);
    return "userList";
}

2.7 编辑userList.html页面

<!DOCTYPE html>
<!--导入模板标签!!!!!-->
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8">
    <title>用户列表数据</title>
</head>
<body>
<!--准备一个表格-->
<table border="1px" align="center" width="800px">
    <tr align="center">
        <td colspan="4"><h3>用户列表</h3></td>
    </tr>
    <tr align="center">
        <td>ID</td>
        <td>名称</td>
        <td>年龄</td>
        <td>性别</td>
    </tr>
    <!--1.页面通过request对象 动态的获取userList数据 之后tr展现-->
    <tr align="center" th:each="user : ${userList}">
        <td th:text="${user.id}"></td>
        <td th:text="${user.name}"></td>
        <td th:text="${user.age}"></td>
        <td th:text="${user.sex}"></td>
    </tr>
</table>
</body>
</html>

2.8 页面效果展现

在这里插入图片描述

2.9 RestFul策略优化

在这里插入图片描述

import com.jt.pojo.User;

import java.util.List;

public interface UserService {
    List<User> findAll();

    void insertUser(User user);

    void updateUser(User user);

    void deleteUserById(Integer id);
}
import com.jt.mapper.UserMapper;
import com.jt.pojo.User;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

@Service
public class UserServiceImpl implements UserService{

    @Autowired
    private UserMapper userMapper;


    @Override
    public List<User> findAll() {

        return userMapper.selectList(null);
    }

    @Override
    public void insertUser(User user) {
        //MP的方式实现入库
        userMapper.insert(user);
    }

    @Override
    public void updateUser(User user) {
        userMapper.updateById(user);
    }

    @Override
    public void deleteUserById(Integer id) {
        userMapper.deleteById(id);
    }
}
import com.jt.pojo.User;
import com.jt.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

import java.util.List;

@Controller
public class UserController {

    @Autowired
    private UserService userService;

    @RequestMapping("/demo")
    @ResponseBody
    public String demo(){
        return "框架整合初步完成";
    }

    /**
     * 查询所有的用户列表数据,在userList.html中展现数据
     */
    @RequestMapping("/userList")
    public String userList(Model model){
        //1.查询业务层获取数据
        List<User> userList = userService.findAll();
        //2.将数据保存到Model对象中返回给页面
        model.addAttribute("userList",userList);
        return "userList";
    }

    /**
     * 需求: 利用restFul实现用户数据新增
     *       新增之后重定向到userList.html页面
     * URL地址: /user/tom/18/男
     * 优化策略:
     *      1.如果有多个参数提交,则可以使用对象接收,但是要求
     *      参数名称必须与属性名称一致
     */
    @RequestMapping("/user/{name}/{age}/{sex}")
    public String insertUser(User user){
        userService.insertUser(user);
        return "redirect:/userList";
    }

    @RequestMapping("/user/{id}/{name}")
    public String updateUser(User user){
        userService.updateUser(user);
        return "redirect:/userList";
    }

    @RequestMapping("/user/{id}")
    public String deleteUser(@PathVariable Integer id){
        userService.deleteUserById(id);
        return "redirect:/userList";
    }
}

3 jQuery实现数据获取

3.1 业务说明

  • 用户通过http://localhost:8090/userAjax 要求跳转到userAjax.html中

准备userAjax页面

<!DOCTYPE html>
<!--导入模板标签!!!!!-->
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8">
    <title>用户列表数据</title>
</head>
<body>
<!--准备一个表格-->
<table border="1px" align="center" width="800px">
    <tr align="center">
        <td colspan="4"><h3>用户列表</h3></td>
    </tr>
    <tr align="center">
        <td>ID</td>
        <td>名称</td>
        <td>年龄</td>
        <td>性别</td>
    </tr>
</table>
</body>
</html>
  • 通过ajax请求向后端服务器获取数据,并且在页面中展现数据
    • 这就是今天所要学习的

3.2 jQuery下载

官网:https://jquery.com/
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • 在项目中的存放位置

在这里插入图片描述

3.3 Ajax介绍

3.3.1 Ajax特点

  • 局部刷新-异步访问
    • 同步:
      • 当用户发起请求时,如果这时服务器正忙
      • 那么用户处于等待的状态,同时不可以做其他的操作
    • 异步:
      • 当用户发起请求时,如果遇到服务器正忙
      • 这时用户可以继续执行后续的操作.同时通过回调函数与服务器沟通

3.3.2 Ajax异步原理

  • 常规同步的调用方式

在这里插入图片描述

  • Ajax异步调用
    • Ajax通过Ajax引擎实现异步的调用.当后台的服务器响应数据之后,通过预先设置好的回调函数进行数据的展现

在这里插入图片描述

3.4 关于JS 循环遍历的写法

1.常规for循环
for(var i=0;i<result.length;i++){
	var user = result[i];
	console.log(user)
}
			  
2.使用in的关键字
//关键字 in index 代表遍历的下标
for(index in result){
	var user = result[index]
	console.log(user)
}
			 
3.使用of关键字
for(user of result){
	console.log(user)
}

3.5 编辑页面JS

<!DOCTYPE html>
<!--导入模板标签!!!!!-->
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8">
    <title>用户列表数据</title>
    <!--
        1.引入函数类库
        2.使用模板工具类中的静态资源文件默认的路径都在static目录下
            所以引入jq的时候,../static可以不写,直接写绝对路径
    -->
    <script src="/jquery-3.6.0.js"></script>
    <!--type="text/javascript" 新版本可以省略了-->
    <script>
        //1.jQuery中有一种编程思想 函数式编程
        $(function () {
            //让整个页面加载完成之后再次执行,以后所有的操作都应该在函数内完成

            /**
             * 常见Ajax用法
             *    1.$.get(url地址,提交数据,回调函数,返回值类型)
             *    2.$.post(url地址,提交数据,回调函数,返回值类型)
             */

            /**
             * 业务需求:要求向后端服务器发起请求 /findAjaxUser,之后将返回值结果 进行页面解析
             */
            $.get("/findAjaxUser", function (result) {
                //1.result是服务器返回的结果 [{},{},{}....}]
                //2.将返回值结果进行循环遍历
                for(user of result){
                	//3.获取对象的属性值
                    var id = user.id
                    var name = user.name
                    var age = user.age
                    var sex = user.sex
                    var tr = "<tr align='center'><td>"+ id +"</td><td>"+name+"</td><td>"+age+"</td><td>"+sex+"</td></tr>"
                    //4.选中id=userTable的元素
                    //5.之后追加数据append(追加的内容)
                    $("#userTable").append(tr)
                }
                /**
                 * for循环的写法
                 *   1.常规for循环
                 *   for(var i = 0;i<result.length;i++){
                 *      var user = result[i];
                 *      console.log(user)
                 *  }
                 *
                 *  2.使用in的关键字
                 *  //in  index代表遍历的下标
                 *  for(index in result){
                 *     var user = result[index]
                 *     console.log(user)
                 *  }
                 *
                 *  3.使用of关键字
                 * for(user of result){
                 *    console.log(user)
                 * }
                 */

            })
        })
    </script>
</head>
<body>
<!--准备一个表格-->
<table id="userTable" border="1px" align="center" width="800px">
    <tr align="center">
        <td colspan="4"><h3>用户列表</h3></td>
    </tr>
    <tr align="center">
        <td>ID</td>
        <td>名称</td>
        <td>年龄</td>
        <td>性别</td>
    </tr>
</table>
</body>
</html>

3.6 编辑UserController

根据前端ajax请求.处理业务

import com.jt.pojo.User;
import com.jt.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

import java.util.List;

@Controller
public class AjaxController {
    @Autowired
    private UserService userService;

    /**
     * 要求跳转到userAjax页面中
     */
    @RequestMapping("/userAjax")
    public String userAjax() {
        return "userAjax";
    }

    /**
     * 接受Ajax请求 /findAjaxUser
     * 返回值结果:Json字符串
     */
    @RequestMapping("/findAjaxUser")
    @ResponseBody
    public List<User> findAjaxUser(){
        return userService.findAll();
    }
}

3.7 页面效果调用

在这里插入图片描述

3.8 关于常见Ajax种类介绍

3.8.1 带参数的请求

  • 字符串拼接
/**
* 带参数的ajax请求
* 参数说明:
* 	key=value&key2=value2....
*	例如: id=1&name=tom
*/
$.get("/findAjaxUser", 'id=1&name=tom', function (result) {
	console.log("带参数请求,字符串拼接")
})

在这里插入图片描述

  • js对象的写法
/**
* 带参数的ajax请求
* 参数说明:
* 	{key:value,key2:value2,....}
*	例如: {id:1,name:tom}
*/
$.get("/findAjaxUser", {id:1,name:tom}, function (result) {
	console.log("带参数请求,js对象写法")
})

在这里插入图片描述

3.8.2 post请求结构

/**
* post请求
*/
$.post('/findAjaxUser',{id:3,name:'post请求'},function (result) {
	console.log('post请求成功')
})

在这里插入图片描述
在这里插入图片描述

3.8.3 getJSON类型

/**
* getJSON类型
* 要求返回值都是json类型
*/
$.getJSON('/findAjaxUser',{id:4,name:'getJSON类型'},function (result) {
	console.log('getJSON请求成功')
})

在这里插入图片描述
在这里插入图片描述

3.8.4 $.ajax类型

/**
	* 最为基本的ajax请求方式
*/
$.ajax({
	type: "put",                         //请求的类型
	url: '/findAjaxUser',                //请求的路径
	data: {id:5,name:'ajax基本请求方式'}, //请求的参数
	//成功之后回调函数
	success: function (result) {
		console.log('ajax基本请求方式成功')//成功回调
	},
	error: function (result) {
		console.log('ajax基本请求方式失败')//失败回调
	}
})

在这里插入图片描述
在这里插入图片描述

3.9 请求类型说明

3.9.1 get请求

  • 会将参数通过?号的形式进行拼接. http://localhost:8090/findUser?id=1&password=123456
  • get请求会将所有的参数动态的拼接到URL中,相对不安全.
  • Get请求不适用于大量的数据提交 各大的浏览器对于Get请求一般都是有上限的.
    • 总结:
      • 查询数据时使用
      • 获取简单数据时使用(页面/JS/CSS…)
      • 一般请求(查询)中GET请求居多

3.9.2 POST

  • POST请求将所有的参数都会进行form的封装
  • 如果需要传递海量的数据,则首选POST
  • POST的请求使用form进行封装,相对于GET请求更加的安全
    • 总结:
      • 提交海量的数据时使用
      • 一般提交文件时使用
      • 提交方式使用POST居多

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

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

相关文章

Python第十二章(函数2)

一。变量作用域&#xff1a; 1.局部变量&#xff1a;定义于函数内部&#xff0c;生效在函数&#xff0c;外部不生效 作用&#xff1a;临时保存数据&#xff0c;当函数调用完毕后&#xff0c;则摧毁局部变量 2.全局变量&#xff1a;定义于函数体外面&#xff0c;在函数体外面…

实现元素进入界面的平滑效果

先看效果&#xff1a; 实现思路&#xff1a;获取页面中需要加载动画的节点&#xff0c;用元素的animate()方法创建一个动画对象&#xff0c;并传入两个关键帧&#xff0c;接着使用IntersectionObserverAPI创建观察对象&#xff0c;用于观察元素进入页面。当元素进入界面时&…

sqli.labs靶场(第18~22关)

18、第十八关 经过测试发现User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:122.0) Gecko/20100101 Firefox/122.0加引号报错 这里我们闭合一下试试 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:122.0) Gecko/20100101 Firefox/122.0,127.0.0.1,adm…

漏洞原理linux操作系统的SqlMap工具的使用

漏洞原理linux操作系统的SqlMap工具的使用 Linux操作系统基础操作链接: 1024一篇通俗易懂的liunx命令操作总结(第十课)-CSDN博客 kali的IP地址:192.168.56.1 实操 # kali中使用sqlmap http://192.168.56.1/ sqlmap -u http://192.168.56.1/news/show.php?id46 sqlmap -u …

线程锁多线程的复习

线程 实现方式3种乐观锁&悲观锁线程池线程池总结 进程:是正在运行的程序 线程:是进程中的单个顺序控制流,是一条执行路径 实现方式3种 1.Thread //步骤一:定义一个继承Thread的类 //步骤二:再定义的类中重写run()方法 //步骤三:创建定义类对象 //步骤四:启动线程 class M…

轮廓测长|轮廓仪高精度测量粗糙度

现代工业制造领域中&#xff0c;为什么测量粗糙度至关重要&#xff1f;在现代工业制造领域中&#xff0c;测量粗糙度是一项非常重要的工作。因为粗糙度能够影响到工件的功能性能和外观质量。当我们制造机器零件或工具时&#xff0c;需要确保表面的光洁度能够满足设计要求。过高…

iOS 自动打包 命令之如何获取PROVISIONING_PROFILE

获取描述文件UUID&#xff1a; 首先在Finder中前往/Users/用户名/Library/MobileDevice/Provisioning Profiles路径 然后在Provisioning Profiles文件夹中选择打包需要的描述文件&#xff0c;一般描述文件的文件名都是由UUID组成的&#xff0c;如果文件名不是由UUID组成的&…

STM32入门教程-2023版【5-1】EXTI外部中断

关注 点赞 不错过精彩内容 大家好&#xff0c;我是硬核王同学&#xff0c;最近在做免费的嵌入式知识分享&#xff0c;帮助对嵌入式感兴趣的同学学习嵌入式、做项目、找工作! 本节主要讲的是&#xff0c;中断系统和外部中断&#xff0c;依靠外部中断来学习中断系统 中断系统&…

idea docker 内网应用实践

文章目录 前言一、服务器端1.1 离线安装docker1.2 开启docker远程访问1.3 制作对应jdk镜像1.3.1 下载jdk171.3.2 Dockerfile 制作jdk17镜像1.3.3 镜像导出1.3.4 服务器引入镜像 二、Idea 配置2.1 Dockerfile2.2 pom 引入docker插件2.3 idea docker插件配置2.4 打包镜像上传2.5 …

基于logisim的MIPS单周期硬布线24条指令CPU

目录 1 前言 2 思路分享 2.1 下载资源 2.2 观看视频 2.3 连接相关电路 2.4 撰写报告 2.5 答辩准备 3 云盘链接 1 前言 该项目为本人大三上学期的实训成果&#xff0c;在实训过程中&#xff0c;纯靠自己摸索&#xff0c;因此迷茫了一段时间。为了不让后来的同学重蹈覆辙…

快速入门JavaScript基础

JavaScript认知 序言 JavaScript发展历史(JS) 简称JS 1.Netscape(网景) 公司的这种浏览器脚本语言&#xff0c;最初名字叫做 Mocha2.1995年9月改为 LiveScript3.1995年12月&#xff0c;Netscape 公司与 Sun 公司&#xff08;Java 语言的发明者和所有者&#xff09;达成协议&am…

Layui + Echarts 5.0

Layui 怎么整合最新版本的 Echarts 5.0&#xff0c;Echarts 4 升级到 5后&#xff0c;有了很大改变&#xff0c;新的配置项4是无法兼容的&#xff0c;所以想要使用新的功能&#xff0c;都需要升级&#xff01; 新建一个echarts.js文件 layui.define(function (exports) {// 这…

C#,广义斐波那契数(Generalised Fibonacci Numbers)的算法

广义斐波那契序列(generalized Fibonacci sequence)是斐波那契数的推广。由递推关系F₁F₂…Fm-10&#xff0c;Fₘ1&#xff0c;FmnFₙFn1…Fnm1&#xff0c;n≥1所产生的序列&#xff0c;称为m级广义斐波那契序列。 计算结果&#xff1a; 源代码&#xff1a; 1 文本格式 …

AF647 二苯并环辛炔,AF647-DBCO,一种明亮且可感光的远红色染料

您好&#xff0c;欢迎来到新研之家 文章关键词&#xff1a;AF647 二苯并环辛炔&#xff0c;AF647 DBCO&#xff0c;Alexa Fluor 647 DBCO&#xff0c;AF647-二苯并环辛炔&#xff0c;AF647-DBCO 一、基本信息 产品简介&#xff1a;Alexa Fluor 647是一种独特的远红色染料&am…

第14章 File类与IO流

第14章 File类与IO流 主要内容 File类字节流字符流文件流缓冲流转换流对象流打印流Scanner、System与IO流 教学目标 使用File类对象表示文件或目录 能够辨别相对路径和绝对路径 能够说出IO流的分类和功能 能够使用FileOutputStream写出数据到文件 能够使用FileInputStream读…

uniapp-v3组合式语法-data实现

在vue选项式风格中,data数据是放置在export default 导出的对象中的一个data方法里面返回 export default {// data() 返回的属性将会成为响应式的状态// 并且暴露在 this 上data() {return {count: 0}},}但这样写,很明显一点都不优雅,代码缩进太多了,还没开始写呢,就已经嵌套…

蓝牙简学(四)

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 HID协议一、摘要二、设备实现1. 大概要写的数据解释2. 代码例子3. 代码例子&#xff08;c&#xff09; HID协议 一、摘要 HID&#xff08;Human Interface Device…

Qt SQLite3数据库加密 QtCipherSqlitePlugin

在客户端软件开发过程中&#xff0c;基本都会涉及到数据库的开发。QT支持的数据库也有好几种&#xff08;QSQLITE, QODBC, QODBC3, QPSQL, QPSQL7&#xff09;&#xff0c;SQLite就是其中之一&#xff0c;但这个 SQLite 是官方提供的开源版本&#xff0c;没有加密功能的。如果对…

【leetcode】01背包总结

01 背包 关键点 容器容量固定每件物品只有两种状态&#xff1a;不选、选 1 件求最大价值 代码 int N, W; // N件物品&#xff0c;容量为W int w[N], v[N]; // w为大小&#xff0c;v为容量/* 数组定义 */ int[][] dp new int[N][W 1]; // 注意是W 1, 因为重量会取到W dp[…

win11玩游戏找不到d3dx9如何解决?5种方法轻松搞定dll问题

在Windows 11操作系统环境下&#xff0c;如果用户在运行游戏时发现系统无法找到d3dx9组件&#xff0c;这一问题可能会引发一系列不良影响和限制&#xff0c;严重影响到用户的正常游戏体验。首先&#xff0c;由于d3dx9是DirectX 9.0c的一部分&#xff0c;负责处理图形渲染等关键…