ajax--案例

Ajax: 是一种在无需重新加载整个网页的情况下,能够更新部分网页的技术

一、js使用Ajax的步骤:

1.创建更新局部信息的对象,

2.通过该对象调用加载数据的方法

3.开启Ajax服务

4.发送数据

ajax生命周期:

1.:所谓 Ajax 的生命周期,其实就是方法 onreaystatechange()中对应的状态吗的一个变化流程,即是 ajax 的生命周期。

2.从程序运行的角度来分析,ajax 的声明周期为:

    第一步:创建ajax对象

    第二步:调用 open()方法,开启 Ajax 请求服务

    第三步:调用 send()方法

    第四步:通过 cyAjax.responseText 接收来自服务器端的数据

    第五步:接收来自服务器端返回数据(用 responseText 属性)

3.从状态码变化角度分析

    Ajax 在执行请求和响应的过程中,其状态会发生五次变化,这五次变
    化分别对应的状态码为:
    0 (未初始化):(XMLHttpRequest)对象已经创建,但还没有调用 open()方法。
    1 (载入):已经调用 open() 方法,但尚未发送请求。
    2 (载入完成):请求已经发送完成。
    3 (交互):可以接收到部分响应数据。
    4 (完成):已经接收到了全部数据,并且连接已经关闭。

简单案例:index.jsp

function testAjax(){
		/* 用JS使用Ajax的步骤: */
		/* 1.创建更新局部信息的对象 */
		var cyAjax = new XMLHttpRequest();
		/* 2.通过该对象调用加载数据的方法 */
		cyAjax.onreadystatechange = function(){
			var divData = document.getElementById("divID");
			//responseText该属性,是把服务器中数据,显示给前台页面
			divData.innerHTML = cyAjax.responseText;
		}
		/* 3.开启Ajax服务
		*3.1:method:请求方式:get/post
		3.2:url:请求后台控制器类URL(访问路径)
		3.3:async:Asynchronized,是同步还是异步,值为true(异步)或false(同步)
		*
		 */
		cyAjax.open("get", "AjaxServlet", true);
		/* 4.发送数据 */
		cyAjax.send(null);
	}
	</script>
  </head>
  <body>
   		<input type="button" value="测试Ajax" onclick="testAjax()">
   		<div id="divID" style="width: 100px;height: 100px;border: solid 1px;">
   		</div>
  </body>

AjaxServlet.java

package com.servlet;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@WebServlet("/AjaxServlet")
public class AjaxServlet extends HttpServlet{
	@Override
	protected void service(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		request.setCharacterEncoding("utf-8");
		response.setContentType("text/html;charset=utf-8");
		//给客户端响应一段数据
		PrintWriter writer = response.getWriter();
		//服务器给浏览器响应数据时,是以文件件输出流方式,把数据传递给客户端
		writer.write("这是通过后台服务器返回给Ajax的内容");
		writer.flush();
		writer.close();
	}
}

简单案例:页面输入用户名和密码,点击登录,后台去数据库查询核对是否正确,将结果展示在页面上,

pojo:实体层

Dao:持久层

servlet:控制层

//获取页面传输过来的数据,Integer.parseInt()将获取过来的值转换为Int类型
		String name= URLDecoder.decode(request.getParameter("uname"),"utf-8");
		int pswd =Integer.parseInt(request.getParameter("upw"));
		System.out.println(name+" "+pswd);
		try {
			//selectName(String string):自定义方法,需要一个String类型的参数,返回一个ResultSet类型的值
			ResultSet rs= new AccountDao().selectName(name);
				rs.next();//判断是否有下一个数据
				ps=rs.getInt(3);
				System.out.println("ps:"+ps);
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		//给客户端响应一段数据
		PrintWriter writer = response.getWriter();
		//服务器给浏览器响应数据时,是以文件件输出流方式,把数据传递给客户端
		if(ps==pswd){
			writer.write("成功");
			//flush() 刷新流。
			writer.flush();
			writer.close();
		}else{
			writer.write("失败");
			//flush() 刷新流。
			writer.flush();
			writer.close();
		}

jsp:表示层

  <script type="text/javascript">
  	function ajaxclick(){
  		var uname = document.getElementById("name").value;
  		var upw = document.getElementById("password").value;
  		
		var cyAjax = new XMLHttpRequest();
		cyAjax.onreadystatechange = function(){
			var divData = document.getElementById("divID");
			divData.innerHTML = cyAjax.responseText;
		}
		cyAjax.open("get", "SelectServlet?uname="+encodeURI(encodeURI(uname)+"&upw="+upw, true));
		cyAjax.send(null);
  	}
  </script>
  <body>

    <input type="text" id="name" name="name">
    <input type="password" id="password" name="password">
    <input type="button" value="登录" onclick="ajaxclick()"> 
    <div id="divID">
    
    </div>

案例Post提交:

用 POST 方式提交请求时,需要把请求头信息设置为:
whnAjax.setRequestHeader("Content-Type","application/x-www-form-urlencoded");

写在servlet里面:

//设置编码格式
			request.setCharacterEncoding("utf-8");
			response.setContentType("text/html;charset=utf-8");
			//获取页面传递的数据
			String name = request.getParameter("name");
			String gender = request.getParameter("gender");
			String works = request.getParameter("works");
			
			PrintWriter writer = response.getWriter();
			writer.write("用户名:"+name+"性别:"+gender+"代表作:"+works);
//			writer.write("性别:"+gender);
//			writer.write("代表作:"+works);
			writer.flush();
			writer.close();

jsp:

  	<script type="text/javascript">
  		function ajaxPost(){
  			
  			var name = document.getElementById("nameID").value;
  			var gender = document.getElementById("genderID").value;
  			var works = document.getElementById("worksID").value;
  			
  			//创建Ajax对象
  			var whnAjax = new XMLHttpRequest();
  			
  			/* var wkajax;
  			//在在低版本的浏览器年代时,需要尽心如下判断。但如今,几乎每个浏览器都能支持ajax的请求,所就不需要判断,也能创建对象。
  			if(window.XMLHttpRequest){//是否是火狐浏览器
  				wkajax = new XMLHttpRequest();
  			}else if(window.ActiveXObject){//是否IE浏览器
  				wkajax = new ActiveXObject("Msxml2.XMLHTTP");
  			} */
  			//加载回调函数
  			whnAjax.onreadystatechange = function(){
  				var data = document.getElementById("divID");
  				data.innerHTML = whnAjax.responseText;
  			}
  			//开启服务
  			/* whnAjax.open("post", "AjaxPost?name=王浩楠&pwd=123456"); */
  			whnAjax.open("post", "AjaxPostServlet");
  			/* 
  			给ajax的请求头添加响应属性和值 
  			需要将ajax的请求信息设置为“application/x-www-form-urlencoded”
  			*/
  			whnAjax.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
  			//发送数据
  			whnAjax.send("name="+name+"&pwd="+gender+"&works="+works);
  		}
  	</script>
  	
  </head>
  <body>
  姓名:<input type="text" id="nameID"><br/>
  性别:<input type="text" id="genderID"><br/>
  代表作品:<input type="text" id="worksID"><br/>
   		<input type="button" value="post方式提交Ajax请求" onclick="ajaxPost()">
   		<div id="divID" style="width: 100px;height: 100px;border: solid 1px;">
   		</div>
  </body>

案例:用 Ajax 读取 xml 文件的数据

xml:

<?xml version="1.0" encoding="UTF-8"?> 
<!--  
XML文件“可扩展标记语言”:(eXtensible Markup Language) 
可以对其中标签进行数量上的增加,就叫“可扩展” 
 --> 
<emp> 
 <name>程勇</name> 
 <gender>男</gender> 
 <age>23</age> 
 <phone>1342223333</phone> 
</emp> 
 
<!-- 脚本语言 --> 
 <script type="text/javascript"> 
  function testXml(){ 
   //创建Ajax对象 
   var ajax = new XMLHttpRequest(); 
   //加载回调函数 
   ajax.onreadystatechange = function(){ 
    var cyData = ajax.responseXML; 
    var result = 
cyData.getElementsByTagName("emp"); 
    for(var i=0;i<result.length;i++){ 
     alert(result[i].innerHTML); 
    } 
   } 
   //开启服务 
   ajax.open("get", "myXmlData.xml"); 
   //发送数据 
   ajax.send(); 
  } 
 </script> 
  </head> 
  <body> 
    <input type="button" value=" 测试 XML 格式数据 " 
onclick="testXml()"> 
  </body> 
 
 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值