struts2中使用原生ajax请求后台数据

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

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进行记录:




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值