jsp中使用原生js实现异步交互

  Ajax的工作原理相当于在用户和服务器之间加了—个中间层,使用户操作与服务器响应异步化。并不是所有的用户请求都提交给服务器,像—些数据验证和数据处理等都交给Ajax引擎自己来做,只有确定需要从服务器读取新数据时再由Ajax引擎代为向服务器提交请求。 Ajax的一个最大的特点是无需刷新页面便可向服务器传输或读写数据,这一特点主要得益于XMLHTTPRequest对象。

 XMLHttpRequest 对象方法

         方法              描述
         abort()      停止当前请求
         getAllResponseHeaders()      作为字符串返问完整的headers
         getResponseHeader("headerLabel")      作为字符串返问单个的header标签
         open("method","URL"[,asyncFlag[,"userName"[, "password"]]])      设置未决的请求的目标 URL, 方法, 和其他参数
         send(content)      发送请求
         setRequestHeader("label", "value")      设置header并和请求一起发送

        属性                                  描述
         onreadystatechange      状态改变的事件触发器
         readyState                      对象状态(integer):
         0 = 未初始化
         1 = 读取中
         2 = 已读取
         3 = 交互中
         4 = 完成
         responseText      服务器进程返回数据的文本版本
         responseXML      服务器进程返回数据的兼容DOM的XML文档对象
         status      服务器返回的状态码, 如:404 = "文件末找到" 、200 ="成功"
         statusText      服务器返回的状态文本信息

 

前端页面中的js代码:

<script type="text/javascript">
	window.onload = function() {
		document.getElementById("btn").onclick = function() {
			var xhr ;
			if (window.XMLHttpRequest) {
				xhr=new XMLHttpRequest();
			} else {
				xhr=new ActiveXObject(Microsoft.XMLHTTP);
			}
			xhr.onreadystatechange = function() {
				if (xhr.readyState == 4) {//说明响应结束	
					if (xhr.status == 200) {//说明响应成功
						alert(xhr.responseText)
					}
				}
			}
			//第一个参数是提交的方式,第二个参数是请求的目标url(后面可以带参数,后台可以通过request.getParameter()方法获取),第三个参数是是否异步传输。
			xhr.open("get", "/ajaxTest/test?name=zhangsan",true)
			xhr.send();
			
			/*
			    使用send之前要设置这些参数,同样地后台可以通过request.getParameter()方法获取,send()方法相当是将数据封装在表单中提交到后台;
	               但是经过实验,使用send方法时,open()方法中的提交方式需是post,否则后台获取不到参数,而在open()方法中带参数则没有这个问题。
			*/
			//xhr.setRequestHeader("Content-Type","application/x-www-form-urlencoded; charset=utf-8") 
			//xhr.send("name=zhangsan");
		}
	}
</script>

 

在servlet中进行响应处理,通过pritWriter就能进行响应,这里输出了一些中文的字符串,但是在输出之前需要设置编码方式,否则会出现乱码的情况:

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // TODO Auto-generated method stub
        request.setCharacterEncoding("utf-8");
        response.setCharacterEncoding("utf-8");//在获取printwriter之前设置编码方式,否则会发生乱码
        System.out.println("已经提交到了servlet");
        System.out.println(request.getParameter("name"));
        PrintWriter printWriter=response.getWriter();
        printWriter.print("这是服务端发送的数据");
        printWriter.flush();
        printWriter.close();
    }

 

结果是前台js已经获取到了响应的字符串:

posted @ 2016-08-21 22:34  Archieyao  阅读(604)  评论(0编辑  收藏  举报