Vue+axios實現異步請求驗證註冊表單

  1. 踩坑紀錄

實現代碼如下:

<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8">
    <title>天天來網路書店-會員註冊</title>

    <!--    引用公共資源css、js-->
    <div th:insert="pages/common/common_resource :: common_resource"></div>
    <script type="text/javascript" th:src="@{/static/script/axios.min.js}"></script>
    <script type="text/javascript" th:src="@{/static/script/vue.js}"></script>
    <script>
        // 使用ajax請求判斷用戶名是否可用
        window.onload=function(){
            var vue = new Vue({
                el: "#checkregist",
                data: {
                    username:'',
                    axioserrormsg:''
                },
                methods: {
                    checkusername: function () {
                        axios({
                            method:"GET",
                            url: "user/checkUsername",
                            params: {
                                username:vue.username
                            }
                        })
                                .then(function (response) {
                                    // console.log(value);
                                    if(response.data.existUsername){
                                        vue.axioserrormsg="用戶名已存在"
                                    }else{
                                        vue.axioserrormsg="用戶名可用"
                                    }
                                })
                                .catch(function (reason) {
                                    console.log(reason);
                                });
                    }
                }
            });
        }
    </script>
</head>
<body>
<div id="login_header">
    <a th:href="@{/}"><img class="book_logo_img" th:src="@{/static/img/Books_logo.jpg}"/></a>
</div>

<div id="content">
    <div class="regist_form" id="checkregist">
        <div>
            <span class="login_title">註冊</span>
            <span class="errormsg" th:text="${errormsg}" >{{errormsg}}</span>
        </div>
        <div class="form">
            <form th:action="@{/user/regist}" method="post">
                <input class="itxt" type="text" placeholder="會員帳號" name="username" v-model="username" @blur="checkusername"><span class="errormsg" >{{axioserrormsg}}</span>
                <input class="itxt" type="password" placeholder="會員密碼" name="password" id="password"><br>
                <input class="itxt" type="password" placeholder="確認密碼" name="checkpassword" id="checkpassword"><br>
                <input class="itxt" type="text" placeholder="電子信箱" name="email" id="email"><br>
                <input class="verification_code" type="text" placeholder="請輸入驗證碼" name="code" id="code">
                <img class="code_img" th:src="@{/kaptcha.jpg}"><br>
                <input type="submit" value="註冊" id="loginbuttom">
            </form>
        </div>
        <div class="regist_account">
            <span>已經有帳號了?</span>
            <span><a th:href="@{/to/login}" th:text="登入" class="login_link"></a></span>
        </div>
    </div>
</div>
<!--    靜態包含末尾頁面-->
<div th:insert="pages/common/footer :: footer"></div>
</body>
</html>

踩坑紀錄

  1. axios中,url配置/user/checkUsername時,異步請求沒反應
  2. 後端返回response時,前端沒反應

解決方案:

  1. axios中,url默認前綴為”專案名/to/“,須將url配置改為user/checkUsername,且後端控制器映射條件改為@RequestMapping(value = “/to/user/checkUsername”,method = RequestMethod.GET)

    注意!! 經測試,element綁定的位置不同,默認的url會不一樣。

    • 綁定在<div>上,url默認前綴為”專案名/to/“。
    • 綁定在<form>上,url默認前綴為”專案名/user/“。
  2. 返回為請求體格式,存放在data內,要接收信息時需要使response.data.existUsername,其中existUsername為返回Map對象的key

轉載請注明來源,歡迎對文章中的引用來源進行考證,歡迎指出任何有錯誤或不夠清晰的表達。可以郵件至 b8954008@gmail.com