zoukankan      html  css  js  c++  java
  • 【jQuery/Thymeleaf】在Thymeleaf页面用jQuery的Ajax方法取得后台数据显示在页面上

    今天翻以前的笔记发现了其中的Dojo代码,它被后来的JQuery取代了,jQuery又被Vue/React要赶下台了,前台真是你未唱罢我登场,程序员每次不跟还不行,跟了把总是觉得新瓶装旧酒,腻歪了。

    本文例程下载:

     https://files.cnblogs.com/files/heyang78/myBank_thymeleaf_jQuery_Ajax_table210906_2051.rar

    正文:

    第一步:前台页面

    <!DOCTYPE html>
    <html xmlns:th="http://www.thymeleaf.org">
    <head>
    <meta charset="UTF-8">
    <title>Show all students</title>
    <script  type="text/javascript" src="js/jquery-3.6.0.min.js"></script>
    <script type="text/javascript">
        $(function(){
        
            $("#showBtn").click(function(){
                $.ajax({
                    url: "allStus",// 请求的地址
                    data:{},// 请求参数--没有
                    type:"get",// 请求方式
                    dataType:"json",// 服务器返回的数据类型即为json对象
                    success: function(resp) {
                        var students=resp;
                        showStudents(students);
                    },
                    timeout: 50000,// 超时时间,超时后会调用error后的函数
                    error: function(xhr, textStatus, errorThrown) {
                        
                        // 404 请求地址无效
                        if(XMLHttpRequest.status=='404'){
                            alert("404:请求地址"+url+"无效.");                
                            return;
                        }
                        
                        var msg="xhr.readyState="+xhr.readyState+"\n";
                        msg+="xhr.status="+xhr.status+"\n";
                        msg+="textStatus="+textStatus+"\n";
                        msg+="errorThrown="+errorThrown+"\n";
                        alert(msg);
                    }
                
                });
            });
        });
        
        function showStudents(students){
            var table=document.getElementById("myTable");
    
            // remove remained rows
            var trs=table.childNodes;
            for(var i=trs.length-1;i>=0;i--){
                table.removeChild(trs[i]);
            }
    
            // add new rows    
            var n=students.length;
            for(var i=0;i<n;i++){
                var stu=students[i];
                
                var td1=document.createElement("td");
                td1.appendChild(document.createTextNode(stu.id));
    
                var td2=document.createElement("td");
                td2.appendChild(document.createTextNode(stu.name));
    
                var tr=document.createElement("tr");
                tr.appendChild(td1);
                tr.appendChild(td2);
                
                table.appendChild(tr);
            }
        }
    </script>
    </head>
    <body>
        <h1>Show all students using jquery.</h1>
        <button id="showBtn">Show</button>
        
        <table border="1px" width="160px">
            <caption>five students</caption>
            <thead>
                <tr><th>id</th><th>name</th></tr>
            </thead>
            <tbody  id="myTable" >
    
            </tbody>
        </table>
    </body>
    </html>

    以上代码需要说明的就是url: "allStus"一处,它与后台的JsonAction的一个相应函数是对应上的,其它代码无需赘述。

    2.后台响应代码

    @RestController
    public class JsonController {
        @Autowired
        private StudentMapper studentMapper;
        
        @GetMapping("/allStus")
        public List<Student> getAllStudents() {
            List<Student> students=studentMapper.findAll();
            return students;
        }
    }

    这个函数的注解是和页面上url对应上的,而返回数据貌似是对象,但由于@RestController的作用,直接变成了json对象,页面上resp对象就是它,往后直接用就可以了。

    3.访问数据库的代码

    @Mapper
    public interface StudentMapper {
    ......
        
        @Select("select * from student")
        List<Student> findAll();
    ......
    }

    这个就是简单查询student表。

    有这三部分,前台页面通过Ajax方式传递请求到后台Rest控制器,然后访问数据库返回json对象的过程就齐活了。

    --END--

  • 相关阅读:
    JS之显式类型转换(最全)
    Python如何以两个字符一行方式输出"Hello World"
    封装localstorage为插件挂载到vue原型上
    封装localstorage 为方法
    input radio checkbox选中的c's's
    vue-插件 引用ali.JS,
    时间相加减
    mall-vue 门店版
    account.vue 以及continuePay.vue 通过action 里面的ajax后去支付
    service/axios.js
  • 原文地址:https://www.cnblogs.com/heyang78/p/15235719.html
Copyright © 2011-2022 走看看