AJAX基础实例

AJAX即“Asynchronous Javascript And XML”(异步JavaScript和XML),是一种创建交互式网页应用的开发技术。初学者应从最原始的AJAX开始学习,这样才能掌握AJAX的核心,下面是通过实例来详细了解AJAX的基础应用。  

可以通过input按钮绑定点击事件,那么这个点击事件就是要实现的AJAX的方法,也可以body里面onload()加载方法。为了方便理解,我给AJAX统一了一个流程,要想实现AJAX,就要按以下步骤走:(1)创建XMLHttpRequest对象;(2)设置请求方式;(3)回调函数;(4)发送请求。

 

(1)创建XMLHttpRequest对象:  

XMLHttpRequest对象可以在不加载整个网页的情况下,对网页进行部分更新,实现后台与数据库交换数据。语法:var xmlHttp = new XMLHttpRequest();如果IE版本是5或6,则是 var xmlHttp = new ActiveXObject("Microsoft,xmlHttp")  

 

(2)设置请求方式;  

Web开发中请求方式有基本的四种:GET,POST,PUT,DELETE,对应着对这个资源的查,改,增,删4个操作,通常只需要用到,get post。XMLHttpRuquest.open(参数1:请求类型get或post;参数2:文件在服务器上的位置;参数3:是否异步处理请求,是为true,否为false)如:xmlHttp.open("POST","StudentServlet.do?method=getCLassJson&msg="+new Date(),true); 

 

(3)回调函数;  

XMLHttpRequest对象的属性onreadystatechange,返回的是一个匿名方法,写作:xmlHttp.onreadystatechange=function(){"回调函数内容"},发送的请求在后台处理完,再返回到前台所实现的功能,就是回调函数。

if(xmlHttp.readyState==4){
		   if(xmlHttp.status==200){
			  //要执行的操作
		   }else{
			   alert("AJAX服务器返回错误!");
		   }
	   }


xmlHttp.readyState代表当前XMLHttpRequest对象的状态,从 0 到 4 发生变化。0: 请求未初始化。1: 服务器连接已建立。2: 请求已接收。3: 请求处理中。4: 请求已完成,且响应已就绪。  

xmlHttp.status是服务器返回的结果,其中200代表正确。404代表未找到页面,500代表内部服务器错误,400代表错误请求。  

(4)发送请求  

调用XMLHttpRequest对象的send()方法,xmlHttp.send();  

 

下面是整个studentList.jsp页面的代码:

<%@ page language="java" contentType="text/html; charset=UTF-8"  pageEncoding="UTF-8"%>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<script type="text/javascript" src="My97DatePicker/WdatePicker.js"></script>
<title>学生列表</title>
<script type="text/javascript">
var xmlHttp;
<!--创建xmlHttpRequest对象-->
function create(){
	   xmlHttp=new XMLHttpRequest();
	   return xmlHttp;
}
<!--回调函数-->
function callback(){
	   if(xmlHttp.readyState==4){
		   if(xmlHttp.status==200){
			  var data = xmlHttp.responseText;
			  var jsonData = eval(data); 
			  var classDom = document.getElementById("students_class");
			  var optionHtml = "<option value=''>请选择</option>";
			  if(jsonData.length>0){
				  for(var i=0;i<jsonData.length;i++){
					  var classes=jsonData[i];
					  optionHtml += "<option value='"+classes.classId+"'>"+classes.className+"</option>";
				  }
			  }
			  classDom.innerHTML=optionHtml;
		   }else{
			   alert("AJAX服务器返回错误!");
		   }
	   }
}

<!--核心方法-->
function run(url){
	create();
	xmlHttp.open("POST",url,true);  //设置请求方式  
  	xmlHttp.onreadystatechange= callback;	  //调用回调函数
  	xmlHttp.send();                       //发送请求
}
function ajaxJson(){
	run("StudentServlet.do?method=getCLassJson&msg="+new Date());
}
</script>
</head>
<body οnlοad="ajaxJson()">
<h2 align="center">学生列表</h2>
   <table width="800" border = "1" align="center" cellspacing="0" cellpadding="2" style="text-align: center">
   <tr height="30" id="searchRow">
       <td colspan="11">
         <form action="StudentServlet.do?method=list" method="post">
	                          姓名:<input type="text" name="studentName" size="10" value="${studentName }"/>
	              班级:<select name="students_class" id="students_class">
			    <option value=''>请选择</option>
			 </select>
	                          入学时间:<input type="text" name="startDate" size="10" value="${startDate }" οnfοcus="WdatePicker()" />
	                                            至<input type="text" name="endDate" size="10" value="${endDate }" οnfοcus="WdatePicker()"/>
	        <input type="submit" value="搜索" />
         </form>                  
       </td>
   </tr>
   <tr height="30">
       <th>序号</th>
       <th>学号</th>
       <th>班级</th>
       <th>姓名</th>
       <th>年龄</th>
       <th>性别</th>
       <th>入学时间</th>
       <th>创建人</th>
       <th>创建时间</th>
       <th colspan = "2">操作</th>
   </tr>
   
   <!--c:forEach为循环控制,将集合(Collection)中的成员循序浏览一遍   JSTL  JSP标准标签库-->
   <%--
      var接收从集合里遍历出的每一个元素,items用于接收集合对象,·varStatus:迭代变量的名称,用来表示迭代的状态
      begin 定义遍历的开始位置,end定义遍历的结束位置,step:迭代的步长
      varStatus.index:当前这次迭代从0开始的迭代索引,varStatus.count:当前这次迭代从1开始的迭代计数  first和last
    --%>
   <c:forEach var="student" items="${requestScope.studentList }" varStatus="listStatus">
	   <tr height="30">
	       <td>${listStatus.count}</td>
	       <td>${student.students_id}</td>
	       <td>${student.className}</td>
	       <td>${student.students_name}</td>
	       <td>${student.students_age}</td>
	       <td>${student.students_sex}</td>
	       <td>${student.students_date}</td>
	       <td>${student.create_name}</td>
	       <td>${student.create_date}</td>
	       <td>
	          <a href="StudentServlet.do?method=getDetail&studentId=${student.students_id}">修改</a>
	       </td>
	       <td>
	          <a href="javascript:if(confirm('确定删除吗?'))location='StudentServlet.do?method=del&studentId=${student.students_id}'">删除</a>
	       </td> 
	   </tr>
   </c:forEach>
   <tr height="30"><td colspan="11" align="right"><input type="submit" name="submitStu" value="+新增信息" οnclick="javascript:window.location.href='updateStudent.jsp'"/></td></tr>
</table>
</body>
</html>
下面是后台代码:


//得到classes
	private void getCLassJson(HttpServletRequest request,HttpServletResponse response) {
		try {
			String classsql = "select * from t_class";
			ResultSet rs = DB.getRs(classsql);//获取结果集
			List<Map<String,Object>> classList = new ArrayList<Map<String,Object>>();
			Map<String,Object> classMap= null;
			while(rs.next()){  //遍历结果集并用Map接收
				classMap = new HashMap<String, Object>();
			classMap.put("classId",rs.getObject("class_id"));
			classMap.put("className",rs.getObject("class_name"));
				classList.add(classMap);//添加到List集合
			}
			//List转成j s o n对象
		JSONArray jsonList = JSONArray.fromObject(classList);
		response.getWriter().write(jsonList.toString());//返回响应信息并输出对象到前端
			response.getWriter().flush();//刷新初始化数据流
		} catch (Exception e) {
			e.printStackTrace();
		} finally{
			try {
				response.getWriter().close();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
		return;
	}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值