AJAX异步校验用户名
AJAX是一种在无需重新加载整个网页的情况下,能够更新部分网页的技术。
在web开发中,经常会遇到需要发送局部请求,比如说验证用户名是否存在,获取手机验证码等,
单纯的验证用户名是否存在没有必要提交整个页面,这样有助于提升响应速度。
前端代码
<script type="text/javascript">
function getXhr() {
var xhr = null;
if(window.XMLHttpRequest){
xhr = new XMLHttpRequest();
}else {
xhr = new ActiveXObject("Microsoft.XMLHttp");
}
return xhr;
}
function checkNameUnique() {
var xhr = getXhr();
xhr.onreadystatechange = function () {
if(xhr.readyState == 4&&xhr.status == 200){
document.getElementById("username_btn").value =xhr.responseText;
}
};
xhr.open("post","/checkNameUnique",true);
xhr.setRequestHeader('content-type','application/x-www-form-urlencoded');
document.getElementById("username_btn").value = "正在验证";
var uname = document.getElementById("username_register").value;
var username = (uname=='用户名')?'':uname;
xhr.send("uname="+username);
}
<script>
......
<h2>注册 </h2>
<form action="/register" method="post">
<div>
<input class="username_register" name="username_register" id="username_register" value="用户名" onfocus="this.value = '';" onblur="if (this.value == '') {this.value = '用户名';}">
<input class="btn" type="button" id="username_btn" value="验证用户名" onclick="checkNameUnique()"/>
</div>
<input classs="tel" name="usrtel" value="手机号" onfocus="this.value = '';" onblur="if (this.value == '') {this.value = '手机号';}">
<div>
<input class="content3" name="code" value="验证码" onfocus="this.value = '';" onblur="if (this.value == '') {this.value = '验证码';}"/>
<button class="btn" onclick="false;" >获取验证码</button>
</div>
<input class="pwd_register" name="psw_register" value="密码" onfocus="this.value = '';" onblur="if (this.value == '') {this.value = '密码';}">
<input type="submit" class="register" value="注册">
</form>
后端代码
@RequestMapping(path = {"/checkNameUnique"},method = {RequestMethod.POST})
@ResponseBody
private String checkNameUnique(@RequestParam("uname") String username){
return userService.checkUsername(username);
}
调试的时候出现的问题
在调试的时候曾把xhr.open和xhr.setRequestHeader这两个函数顺序写反了,效果一直就出不来。