SpringMVC 处理AJAX请求

AJAX

AJAX概念

        AJAX = Asynchronous JavaScript and XML(异步的 JavaScript 和 XML)。

        AJAX 不是新的编程语言,而是一种使用现有标准的新方法。

        AJAX 是与服务器交换数据并更新部分网页的艺术,在不重新加载整个页面的情况下。

        简而言之:局部刷新。

AJAX简介

        AJAX 是一种用于创建快速动态网页的技术。

        通过在后台与服务器进行少量数据交换,AJAX 可以使网页实现异步更新。这意味着可以在不重新加载整个网页的情况下,对网页的某部分进行更新。

        传统的网页(不使用 AJAX)如果需要更新内容,必需重载整个网页面。

        有很多使用 AJAX 的应用程序案例:新浪微博、Google 地图、开心网等等。

                Google Suggest 在 2005 年,Google 通过其 Google Suggest 使 AJAX 变得流行起来。

                Google Suggest 使用 AJAX 创造出动态性极强的 web 界面:当您在谷歌的搜索框输入

关键字时,JavaScript 会把这些字符发送到服务器,然后服务器会返回一个搜索建议的列表。

关于 jQuery 与 AJAX

        jQuery 提供多个与 AJAX 有关的方法。

        通过 jQuery AJAX 方法,您能够使用 HTTP Get 和 HTTP Post 从远程服务器上请求文本、HTML、XML 或 JSON - 同时您能够把这些外部数据直接载入网页的被选元素中。

        提示:如果没有 jQuery,AJAX 编程还是有些难度的。

        编写常规的 AJAX 代码并不容易,因为不同的浏览器对 AJAX 的实现并不相同。这意味着您必须编写额外的代码对浏览器进行测试。不过,jQuery 团队为我们解决了这个难题,我们只需要一行简单的代码,就可以实现 AJAX 功能。

AJAX定义和用法

JSON

什么是 JSON 

        JSON 指的是 JavaScript 对象表示法(JavaScript Object Notation)

        JSON 是轻量级的文本数据交换格式

        JSON 独立于语言 *

        JSON 具有自我描述性,更易理解

JSON 语法规则

        JSON 语法是 JavaScript 对象表示法语法的子集。

                数据在名称/值对中

                数据由逗号分隔

                花括号保存对象

                方括号保存数组

Springmvc 处理ajax请求

        概要

                处理AJAX请求

                返回JSON数据

        架包支持

                项目中需要增加的jar包:

                        jackson-all-1.8.10.jar

                        fastjson-1.2.47.jar(阿里巴巴)  

                在控制器中增加方法

                        使用注解:@ResponseBody,@RequestBody

                        该注解设置返回值为JSON类型      

        案例展示

                1.使用原生的Str返回

                        跳转至sendjson.jsp页面

 @RequestMapping("/tosendjson.action")
    public String toSendJson() {
        logger.info("控制器跳转至:sendjson");
        return "sendjson";
    }

                        sendjson.jsp页面

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    
    <title>AJAX</title>
    <script src="${pageContext.request.contextPath}/js/jquery-1.4.4.min.js"></script>
    <script>
        function myFun() {
            //jquery获得文本框值得写法
            var name = $("#name").val();
            //使用AJAX完成参数传递,请求
            $.ajax({
                type: "post",
                url: "receive.action",
                data: name,
                contentType: 'application/json;charset=utf-8',
                success: function (data) {
                    console.log(data);
                    //将页面中的标题标签更新
                    $("#h1").html(data);
                }
            });
        }
    </script>
</head>
<body>
<p><input type="text" id="name" name="name" placeholder="请输入姓名"></p>
<p>
    <button type="button" onclick="myFun()">提交</button>
</p>
<h1 id="h1"></h1>
</body>
</html>

                        receive.action控制单元

 /*
     * 中文乱码问题得到解决
     * 原理: 手动给对应的Accept返回制定格式编码数据。
     * 发现produces设置多个Accept只有第一个的charset是有用的,
     */
    @RequestMapping(value = "/receive.action", produces = {"text/html;charset=UTF-8;", "application/json;"})
    @ResponseBody
    public String receive(@RequestBody String name) {
        logger.info(name);
        String str = "welcome欢迎" + name;
        logger.info(str);
        return str;
    }

                        运行结果,点击提交显示内容 

                2.使用对象返回,Json自动解析

                        跳转至sendjson2.jsp页面

    @RequestMapping("/tosendjson2")
    public String toSendJson2() {
        logger.info("控制器跳转至:sendjson2");
        return "sendjson2";
    }

                        sendjson2.jsp页面   


<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>sendjson2</title>
    <script src="${pageContext.request.contextPath}/js/jquery-1.4.4.min.js"></script>
    <script>
        var user = {
            name: "张",
            age: 22,
            tel: 13333333333
        }

        function myFun() {
            console.log(user);
            //将User对象转化为JSON类型的字符串
            var userStr = JSON.stringify(user);
            console.log(userStr);
            $.ajax({
                type: "post",
                url: "receive2.action",//请求服务器地址
                data: userStr,
                contentType: 'application/json;charset=utf-8',
                success: function (username) {
                    console.log(username);
                    $("#h1").html(username);
                }
            });
        }
    </script>
</head>
<body>
<pre>
    var user={
    name:"张",
    age:22,
    tel:13279560363
    }
</pre>
<h3>点击按钮,从页面中的js获取User对象,将该对象用JSON.stringify(user)方法将用户转化为字符串,然后送给后台</h3>
<button onclick="myFun()">确定</button>
<h1 id="h1"></h1>
</body>
</html>

                        receive2.action控制单元


    @RequestMapping(value = "/receive2", produces = {"text/html;charset=UTF-8;", "application/json;"})
    @ResponseBody
    public String receive2(@RequestBody User user) {
        logger.info(user.getName());
        String str = "你好:" + user.getName();
        return str;
    }

                        运行结果,点击确定显示内容 

                 3.集合列表展式

                        产品类

package com.springmvc.po;


import java.util.Date;

/**
 * @Author : Eeerosss
 * @create 2022/9/1 17:08
 */
public class Product {
    private int pid;
    private String pname;
    private String type;
    private double price;
    private Date pdate;

    public Product(int pid, String pname, String type, double price, Date pdate) {
        this.pid = pid;
        this.pname = pname;
        this.type = type;
        this.price = price;
        this.pdate = pdate;
    }

    @Override
    public String toString() {
        return "Product{" +
                "pid=" + pid +
                ", pname='" + pname + '\'' +
                ", type='" + type + '\'' +
                ", price=" + price +
                ", pdate=" + pdate +
                '}';
    }

    public int getPid() {
        return pid;
    }

    public void setPid(int pid) {
        this.pid = pid;
    }

    public String getPname() {
        return pname;
    }

    public void setPname(String pname) {
        this.pname = pname;
    }

    public String getType() {
        return type;
    }

    public void setType(String type) {
        this.type = type;
    }

    public double getPrice() {
        return price;
    }

    public void setPrice(double price) {
        this.price = price;
    }

    public Date getPdate() {
        return pdate;
    }

    public void setPdate(Date pdate) {
        this.pdate = pdate;
    }
}

                        跳转至sendjson5.jsp页面


    @RequestMapping("/tosendjson5")
    public String toSendJson5() {
        logger.info("控制器跳转至:sendjson5");
        return "sendjson5";
    }

                        sendjson5.jsp页面   

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>sendjson2</title>
    <script src="${pageContext.request.contextPath}/js/jquery-1.4.4.min.js"></script>
    <script>
        function myFun() {
            $.ajax({
                type: "post",
                url: "receive5.action",//请求服务器地址
                contentType: 'application/json;charset=utf-8',
                success: function (list) {
                    console.log(list);
                    //创建字符串,等待接收所有信息
                    var html = "<tr><th>编号</th><th>产品名称</th><th>产品类型</th><th>产品价格</th><th>生产日期</th></tr>";
                    $.each(list, function (i, item) {
                        html += "<tr><td>" + item.pid + "</td><td>" + item.pname + "</td><td>" + item.type + "</td><td>" + item.price + "元</td><td>" + new Date(item.pdate).toLocaleString() + "</td></tr>";
                    });
                    console.log(html);
                    $("#t").html(html);
                }
            });
        }
    </script>
</head>
<body>
<button onclick="myFun()">点击展示饮料列表</button>
<h1>饮料产品列表</h1>
<div>
    <table id="t" border="1px" width="800px" style="border-collapse: collapse;text-align: center">

    </table>
</div>
</body>
</html>

                          receive5.action控制单元

  @RequestMapping("/receive5")
    @ResponseBody
    public List<Product>  receive5(){
       List<Product> list=new ArrayList<>();
        list.add(new Product(1,"可口可乐","碳酸饮料",3, new Date()));
        list.add(new Product(2,"茉莉蜜茶","茶饮料",3,new Date()));
        list.add(new Product(3,"农夫山泉","矿泉水",2,new Date()));
        list.add(new Product(4,"百事可乐","碳酸饮料",3,new Date()));
        list.add(new Product(5,"冰红茶","茶饮料",3,new Date()));
        list.add(new Product(6,"红牛","功能饮料",5,new Date()));
        return list;
    }

                         运行结果,点击提交显示内容 

                        点击展示饮料列表

        案例展示完成 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值