ajax:Asynchronous Javascript And XML

ajax发送请求

1、 ajax对象获取

ajax由浏览器提供,有兼容性问题,需要区分浏览器

方式一:判断方式

//获取ajax对象
function getXhr(){
	var xhr;
	//判断浏览器(非ie)
	if(window.XMLHttpRequest){
		xhr = new XMLHttpRequest();
	}else{// 低版本ie
		xhr = new ActiveXObject('Microsoft.XMLHTTP');
	}
	return xhr;
}

方式二:try...catch...方式
var ajax;
try {
	//如果是其它浏览器,这句代码可以成功,拿到ajax对象
	ajax  = new XMLHttpRequest(); 
} catch (e) {
	//如果是IE,上面会报错,就执行下面这句代码(IE支持)
	ajax = new ActiveXObject("Microsoft.XMLHTTP"); 
}

2、创建请求

创建请求分为get请求和post请求

get请求:
	xhr.oper("get","url?username="+name) // username:传入的参数
post请求:
	比get请求多一步,必须设置请求头,操作必须在open与send之间调用。参数在send发送请求时传入
	xhr.setRequestHeader("content-type","application/x-www-form-urlencoded");

3、发送请求

//get请求:
	xhr.send();
		
	//post请求:
	xhr.send("username="+name);

4、 设置回调函数

设置监听事件:监听请求的状态,只监听:请求状态成功(4) 、 响应成功状态(200)

xhr.onreadystatechange = function(){
		//判断状态:请求状态成功4  、 响应成功状态200
		if(xhr.readyState == 4 && xhr.status == 200){
			//接收服务端响应回来的数据(responseText只接收text文本)
			var text = xhr.responseText;
			alert(txet);//弹窗,验证是否接收到数据
		}
	}

完整代码

<body>
	<form action="/register" method="post">
		用户名:<input type="text" name="username" id="name"/><span id="userSpan"></span><br />
		密 码:<input type="password" name="password" id="pwd"/><span id="userSpan"></span><br />
		<input type="submit" value="注册"/>
	</form>
	<script type="text/javascript">
		//获取ajax对象
		function getXhr(){
			var xhr;
			//判断浏览器(非ie)
			if(window.XMLHttpRequest){
				xhr = new XMLHttpRequest();
			}else{// 低版本ie
				xhr = new ActiveXObject('Microsoft.XMLHTTP');
			}
			return xhr;
		}
		
		//1、获取焦点事件onfocus 
		document.getElementById("name").onfocus = function(){
			//通过id获取元素,设置双标签中的元素(**innerHTML 浏览器会解析**)
			document.getElementById("userSpan").innerHTML = "<font color='#ADFF2F'>请填写用户名</font>"
		}
		//2、失去焦点onblur 
		document.getElementById("name").onblur = function(){
			//获取用户输入的值
			var name = document.getElementById("name").value;
			//非空判断
			if (name != "") { //此处判断不能使用null,只能使用""
				//清除userSpan内容
				document.getElementById("userSpan").innerHTML = ""
				
				//1.获取ajax对象
				var xhr = getXhr();
				//2.创建请求(请求方式,路径)
				xhr.open("POST","/user");  // post请求
				//若是get请求: xhr.open("get","/user?"username="+name)
				
				//get请求没有这一步。post请求必须设置请求头,操作必须在open与send之间调用
				//设置异步对象的xhr.setRequestHeader成员的值
				xhr.setRequestHeader("content-type","application/x-www-form-urlencoded");
				
				//3.发送请求
				xhr.send("username="+name); //post请求
				//若是get请求:xhr.send()
				
				//4.判断状态,请求成功,并且响应成功,处理
				xhr.onreadystatechange = function() {
					//判断状态:请求状态成功4  、 响应成功状态200
					if (xhr.readyState == 4 && xhr.status == 200) {
						//接收服务端响应回来的数据(responseText只接收text文本)
						var txt = xhr.responseText;
						//判断
						if (txt.indexOf("ok") != -1) {
							document.getElementById("userSpan").innerHTML = "<font color='red'>用户名可以使用</font>"
						} else{
							document.getElementById("userSpan").innerHTML = "<font color='red'>用户名已存在</font>"
						}
					}
				}
				
			} else{
				document.getElementById("userSpan").innerHTML = "<font color='red'>用户名不能为空</font>"
			}
		}
	</script>
</body>

java代码(用户名已写死):

@Controller
public class AjaxContorller {

	@RequestMapping("/user")
	@ResponseBody //配置此标签,将不经过视图解析器
	public String userName(String username) {
		//验证用户名是否存在
		if ("admin".equals(username)) {
			return "error"; //应户名存在
		}
		return "ok"; //用户名不存在
	}
}