SSH+Ajax(XMLHttpRequest实现)涉及json

后台为SSH,前台用纯JS实现Ajax(XMLHttpRequest方式)

目的:选择下拉框选项,下面的表单以ajax方式对应显示

前台代码:

<!DOCTYPE html>
<html>
<head>
	<meta name="author" content="Yeeku.H.Lee(CrazyIt.org)" />
	<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
	<title> 使用JSON响应 </title>
	<style type="text/css">
		select {
			width:160px;
			font-size:11pt;
		}
	</style>
</head>
<body>
<select name="category" id="category" size="4"
	οnchange="change(this.value);">
	<option value="1" selected="selected">编程类</option>
	<option value="2">小说类</option>
	<option value="3">哲学类</option>
</select>
<table border="1" style="border-collapse:collapse;width:600px">
	<thead>
		<tr>
			<th>学号</th>
			<th>姓名</th>
			<th>密码</th>
			<th>电话号码</th>
		</tr>
	</thead>
	<tbody id="book">
	</tbody>
</table>
<script type="text/javascript">
// 定义了XMLHttpRequest对象
var xmlrequest;
// 完成XMLHttpRequest对象的初始化
function createXMLHttpRequest()
{
	if(window.XMLHttpRequest)
	{ 
		// DOM 2浏览器
		xmlrequest = new XMLHttpRequest();
	}
	else if (window.ActiveXObject)
	{
		// IE浏览器
		try
		{
			xmlrequest = new ActiveXObject("Msxml2.XMLHTTP");
		}
		catch (e)
		{
			try
			{
				xmlrequest = new ActiveXObject("Microsoft.XMLHTTP");
			}
			catch (e)
			{
			}
		}
	}
}
// 事件处理函数,当下拉列表选择改变时,触发该事件
function change(id)
{
	// 初始化XMLHttpRequest对象
	createXMLHttpRequest();
	// 设置请求响应的URL
	var uri = "viewstudent2.action";
	// 设置处理响应的回调函数
	xmlrequest.onreadystatechange = processResponse;
	// 设置以POST方式发送请求,并打开连接
	xmlrequest.open("POST", uri, true); 
	// 设置POST请求的请求头
	xmlrequest.setRequestHeader("Content-Type"
		, "application/x-www-form-urlencoded");
	// 发送请求
	xmlrequest.send("cc="+id);
}
// 定义处理响应的回调函数
function processResponse()
{
	// 响应完成且响应正常
	if (xmlrequest.readyState == 4)
	{
		if (xmlrequest.status == 200)
		{
			var bookTb = document.getElementById("book");
			// 删除bookTb原有的所有行
			while(bookTb.rows.length > 0)
			{
				bookTb.deleteRow(bookTb.rows.length - 1);
			}
			// 获取服务器的JSON响应
			// 并调用eval()函数将服务器响应解析成JavaScript数组
			var bookss = JSON.parse(xmlrequest.responseText);
			var books=bookss.users;
			/* var books = eval(xmlrequest.responseText); */
			// 遍历数组,每个数组元素生成一个表格行
			for (var i = 0 , len = books.length ; i < len ; i++)
			{
				var tr = bookTb.insertRow(i);
				// 依次创建4个单元格,并为单元格设置内容
				var cell0 = tr.insertCell(0);
				cell0.innerHTML = books[i].stuid;
				var cell1 = tr.insertCell(1);
				cell1.innerHTML = books[i].stuname;
				var cell2 = tr.insertCell(2);
				cell2.innerHTML = books[i].qqnum;
				var cell3 = tr.insertCell(3);
				cell3.innerHTML = books[i].tel;
			}
		}
		else
		{
			//页面不正常
			window.alert("您所请求的页面有异常。");
		}
	}
}
</script>
</body>
</html>

后台 的action

public String test()throws IOException , ServletException
	{
		 
		 ActionContext ac = ActionContext.getContext();
		 HttpServletRequest request=(HttpServletRequest)ac.get(ServletActionContext.HTTP_REQUEST); 
		 HttpServletResponse response 
		=(HttpServletResponse)ac.get(ServletActionContext.HTTP_RESPONSE); 
		 System.out.println(cc);
		 
		List<User> users=this.userService.findAll();
		int totalCount=users.size();
		JSONArray array=JSONArray.fromObject(users);
		
		if(cc.equals("2"))
		{
			
			
		}else
		{
			
		}
		
		Map<String,Object> maps=new HashMap<String,Object>();
		maps.put("users", array);
		maps.put("totalCount", totalCount);
		this.setAa(maps);
		System.out.println(maps);
		return SUCCESS;
	}

struts.xml配置:

	<!--Ajax测试方法-->
<package name="json" extends="json-default" namespace="/">
   					<action name="viewstudent2" class="Viewstudent" method="test">
   					<result name="success" type="json">
   						<param name="root">aa</param>
   					</result>
   					</action>
</package>
主要难点:前后台数据交互,前台解析JSON

ajax相关配置:浏览器的选择,服务器的响应网上有很多,上面的代码也有。

需要说明的是

// 事件处理函数,当下拉列表选择改变时,触发该事件
function change(id)
{
	// 初始化XMLHttpRequest对象
	createXMLHttpRequest();
	// 设置请求响应的URL
	var uri = "viewstudent2.action";
	// 设置处理响应的回调函数
	xmlrequest.onreadystatechange = processResponse;
	// 设置以POST方式发送请求,并打开连接,true代表异步传输
	xmlrequest.open("POST", uri, true); 
	// 设置POST请求的请求头
	xmlrequest.setRequestHeader("Content-Type"
		, "application/x-www-form-urlencoded");
	// 发送请求
	xmlrequest.send("cc="+id);
}
GET方法发送的时候可以用url+参数的形式,POST可以在send("参数"),post应该可以广泛,传入后台的参数为:


后台可以直接set方法注入就可以获得前台项目参数名字的值,不需要用httprequest,是否因为spring缘故,笔者暂时不知

String cc;
	
	public String getCc() {
		return cc;
	}
	public void setCc(String cc) {
		this.cc = cc;
	}
后台代码在上面 将数据库取出的LIST集合转为json对象,前台用

var bookss = JSON.parse(xmlrequest.responseText);方式解析出来

前台得到的数据:


取出其中的users:

var books=bookss.users;

显示在html:

// 遍历数组,每个数组元素生成一个表格行
for (var i = 0 , len = books.length ; i < len ; i++)
{
var tr = bookTb.insertRow(i);
// 依次创建4个单元格,并为单元格设置内容
var cell0 = tr.insertCell(0);
cell0.innerHTML = books[i].stuid;
var cell1 = tr.insertCell(1);
cell1.innerHTML = books[i].stuname;
var cell2 = tr.insertCell(2);
cell2.innerHTML = books[i].qqnum;
var cell3 = tr.insertCell(3);
cell3.innerHTML = books[i].tel;
}

完成!


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值