天天看點

Day45SpringBoot整合Jquery

學習目标

1.能夠使用jQuery的​

​$.get()​

​​進行通路

2.能夠使用jQuery的​​

​$.post()​

​​進行通路

3.能夠使用jQuery的​​

​$.ajax()​

​​進行通路

4.能夠使用jQuery3.0的​​

​$.get()​

​​新增簽名進行通路

5.能夠使用jQuery3.0的​​

​$.post()​

​新增簽名進行通路

jQuery架構的ajax簡介

  • (1)原生Ajax程式設計為什麼不用?

    代碼量大,使用不友善,封裝成函數,直接調用

  • (2)jQuery架構的ajax函數

$.get請求-原理

  • (1)get函數

    ​$.get(url, [data], [callback], [type])​

  • url:表示伺服器的通路路徑,如:“s1”
  • data:表示向伺服器發送的參數, ​

    ​格式: 1: "username=wzx&password=123" ​

    ​2:json串
  • callback:匿名函數,表示接收伺服器發送過來的響應,這個函數自動執行
  • type :表示浏覽器期望伺服器發送過來的資料類型,​

    ​格式:"text" "json"​

    ​ (2)get請求原理
$.get(
         "s2",
         "username=wzx&password=123",
         function(data){ //這個data就是伺服器傳回的字元串
            //處理資料
         },
         "text"
     ); 
     $.post(
         "s2",
         "username=wzx&password=123",
         function(data){ //這個data就是伺服器傳回的字元串  var data = []
            //處理資料
         },
         "json"
     );

    var url = "s2";
    var param =  "username=lft&password=123";
    var func = function(data){
     
    };
    var type = "json";
    $.post(url,param,func,type);      

$.get請求-代碼實作

(1)在點選事件中調用get請求

(2)在服務端傳回json或者字元串資料

(3)在回調函數中編寫業務邏輯

web\1-juqery-get_post_index.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script type="text/javascript" src="jquery-3.3.1.js"></script>

    <script type="text/javascript">
        function clickFn() {
            //向伺服器發送異步請求
            $.post(
                "s2",
                "username=寶強x&password=123",
                function (data) {
                    alert(data);
                },
                "text"
            );
        }
    </script>


</head>
<body>
    <!--設計一個按鈕,一點選這個按鈕,就向伺服器發出異步請求-->
    <input type="button" value="點我,發出jquery$.get異步請求" onclick="clickFn()"/>
</body>
</html>      

src\com\wzx\pack02_jquery_ajax\Demo2Servlet.java

@WebServlet(name = "Demo2Servlet",urlPatterns = "/s2")
public class Demo2Servlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            doGet(request, response);
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
         //解決請求亂碼
        request.setCharacterEncoding("UTF-8");
           //1:接收參數
        String username = request.getParameter("username");
        String password = request.getParameter("password");

        System.out.println("username:"+username);
        System.out.println("password:"+password);
//        System.out.println(1/0);
        //解決響應亂碼
        response.setContentType("text/html;charset=UTF-8");
        response.getWriter().write("你好  ajax!");
    }
}      

$.ajax請求方式***

(1)什麼是​

​$.ajax​

​請求方式

這種方式是将​

​$.get​

​和​

​$.post​

​方式合成一種請求

(2)如何調用

​$.ajax({鍵:值,鍵:值,鍵:值});​

​ web\2-jquery-ajax-index.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script type="text/javascript" src="jquery-3.3.1.js"></script>

    <script type="text/javascript">
        function clickFn() {
          $.ajax({
              url:"s2",
              async:true,
              data:"username=bingbing&password=456",
              type:"post",
              dataType:"text",
              success:function (data) {
                  alert(data)
              },
              error:function () {
                    alert("伺服器發生了錯誤")
              }
          });
        }
    </script>


</head>
<body>
    <!--設計一個按鈕,一點選這個按鈕,就向伺服器發出異步請求-->
    <input type="button" value="點我,發出ajax異步請求" onclick="clickFn()"/>
</body>
</html>      
  • 以上調用$.ajax的函數代碼最好是複制過來,因為方法内的鍵不能随意修改,保能修改值
  • type 如果是get 表示get請求,反之就是post請求

jquery3.0新特性ajax請求

  • (1)什麼是juqery3.0新特性GET/POST請求
$.get({鍵:值,鍵:值});
$.post({鍵:值,鍵:值});      
  • 因為方法指定get與post,是以要比$.ajax少一個鍵,type:post或者type:get,其他都一樣。
  • 企業中一般還是使用1.x

Jquery 擷取json資料顯示清單

Day45SpringBoot整合Jquery

src\main\resources\static\list_account.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <!--    1引入jquery檔案-->
    <script type="text/javascript" src="js/jquery-1.8.3.min.js"></script>
</head>
<body>

<input type="button" value="添加">
<input type="text" value="" name="searchword">
<input type="button" value="查詢">

<table border="1" width="100%">
    <thead>
    <tr>
        <th>編号</th>
        <th>姓名</th>
        <th>餘額</th>
        <th>操作</th>
    </tr>
    </thead>
    <tbody id="tbody">
<!--    <tr>-->
<!--        <td>1001</td>-->
<!--        <td>jack</td>-->
<!--        <td>100</td>-->
<!--        <td>修改|删除</td>-->
<!--    </tr>-->
<!--    <tr>-->
<!--        <td>1002</td>-->
<!--        <td>rose</td>-->
<!--        <td>100</td>-->
<!--        <td>修改|删除</td>-->
<!--    </tr>-->
    </tbody>
</table>
</body>
</html>
<script type="text/javascript">
    $(function () {
        //2 頁頁加載成功的時候執行
        //alert("加載成功")
        //參1:位址
        //參2:處理
        //參3:類型
        $.get("http://localhost:8002/day01/account/find",
            function (data) {
                //{"code":200,"msg":"查詢成功","data":[{"id":"101","name":"jack","value":100.0},{"id":"102","name":"rose","value":100.0},{"id":"103","name":"tony","value":100.0},{"id":"1667347080045","name":"11","value":22.0},{"id":"1667347092913","name":"22","value":33.0},{"id":"1667347133294","name":"11","value":22.0}]}
                if (200 == data.code) {
                    //清空表中的标簽
                    $("#tbody").html("")
                    var array = data.data
                    var i
                    for (i = 0; i < array.length; i++) {
                        var account = array[i] //每個Account
                        var tr = '  <tr>\n' +
                            '                <td>' + account.id + '</td>\n' +
                            '                <td>' + account.name + '</td>\n' +
                            '                <td>' + account.value + '</td>\n' +
                            '                <td>修改|删除</td>\n' +
                            '            </tr>'
                        $("#tbody").append(tr)
                    }
                }
            }
            , "json")
    })
</script>      

使用JQuery将form表單資料轉換為JSON字元串傳遞到背景處理

一般地,我們在處理表單(form表單哦)資料時,傳輸對象或字元串到背景,Spring MVC或SpringBoot的Controller接收時使用一個對象作為參數就可以被正常接收并封裝到對象中。這種方式前端處理表單資料時可以這樣處理:

$('#form').serialize()
//或者
$('#form').serializeArray()      

這種方式傳輸的資料格式可以在F12中看到是這樣的:

使用AJAX發送到背景後,背景使用一個對象作為Controller層内某個方法的參數即可完成自動封裝。

但是,我現在背景的需求是需要接收一個@RequestBody标記的Account類型的參數,

然後自己寫方法(利用反射機制)封裝對象。就像下面這樣:

這時就需要傳遞一個JSON格式的字元串,比如:

這時候,前端的處理方式如下,注意:contentType是必須的:

var fields = $('#ff').serializeArray();
            var obj = {}; //聲明一個對象
            $.each(fields, function(index, field) {
                obj[field.name] = field.value; //通過變量,将屬性值,屬性一起放到對象中
            })      

再發送請求給背景

$.ajax({
                    type: "post",
                    url: "http://localhost:8002/day01/account/add",
                    async: true,
                    contentType: 'application/json',
                    dataType: 'JSON',
//                  data:$('#ff').serialize(),//這兩種方式都不能直接将表單資料轉換為json格式
//                  data:$('#ff').serializeArray(),
                    data: JSON.stringify(obj),//将對象轉為json字元串
                    success: function (obj) {
                        if (obj.code == 200) {
                            alert(obj.msg)
                        }
                    }
                });      

這樣,通過F12可以看到傳遞的就是json字元串:

繼續閱讀