struts2中使用ajax请求后台数据在平时是很常用的技术点,下面简单介绍一下:
1、配置struts.xml文件
<struts>
<package name="default" namespace="/" extends="struts-default">
<result-types>
<result-type name="json" class="org.apache.struts2.json.JSONResult"></result-type>
</result-types>
<action name="UserAction_*" class="com.ys.struts.UserAction" method="{1}">
<!--<result name="success">/index.jsp</result>-->
<result name="success" type="json">
<param name="root">result</param>
</result>
</action>
</package>
</struts>
2、处理类UserAction
public class UserAction extends ActionSupport{
private String result;
public String getResult() {
return result;
}
public void setResult(String result) {
this.result = result;
}
public String index() throws Exception {
result = "{'flag':'false','errormsg':'出现错误'}";
return "success";
}
}
3、前端html请求
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<script type="text/javascript" src="script/jquery-1.11.1.min.js"></script>
<script>
function getGoods(){
$.ajax({
type:"GET",
url:"UserAction_index.action",
data:{
},
dataType:'json',
success:function(data) {
var data = eval('(' + data + ')');
if(data.flag == 'true'){
alert(123);
}
},
async:false
});
var xmlhttp;
if(window.XMLHttpRequest){
//code for IE7,Firefox,Chrome,Opera,Safari
xmlhttp=new XMLHttpRequest();
}else{
//code for IE6,IE5
xmlhttp=new ActiveXOjbect("Microsoft.XMLHTTP");
}
xmlhttp.onreadystatechange=function()
{
//alert(xmlhttp.readyState);
if(xmlhttp.readyState==4&&xmlhttp.status==200){
var objResult= eval("("+xmlhttp.responseText+")");
var Result= eval("("+objResult+")");
if(Result.flag == 'false'){
alert(Result.errormsg);
}
}
}
xmlhttp.open("get","UserAction_index",true);
xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded");
xmlhttp.send();
}
</script>
</head>
<body>
<input type="button" value="点击" οnclick="getGoods();"/>
</body>
</html>
我用了两种方式进行ajax请求,一种是JQuery提供的$.ajax方式,很明显,这种方式简单方便;第二种是原生的ajax请求,通过struts2从后台得到了数据即:
var objResult= eval("("+xmlhttp.responseText+")");
var Result= eval("("+objResult+")");
if(Result.flag == 'false'){
alert(Result.errormsg);
}xmlhttp.responseText得到了服务器响应的内容,我使用eval将它转成对象,但是调用objResult.flag浏览器显示为undefined,直接输出objResult还是一段json数据即:
{'flag':'false','errormsg':'出现错误'},怎么就是得不到呢,为什么不是json对象,最后,我想,浏览器弹出来的还是字符串,而不是[Object]这种对象的形式,说明objResult还不是json对象,于是我又对objResult使用eval,结果,果然是,我得到了正确的结果。
对于这两种方式,我是用HttpWatch进行记录:

本文介绍了在Struts2框架下如何利用Ajax进行后台数据请求。通过配置struts.xml文件,解决返回数据格式问题,探讨了处理返回JSON对象的两种方法,并通过HttpWatch工具进行请求监测,确保数据正确解析。
6809

被折叠的 条评论
为什么被折叠?



