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

来源:互联网 发布:最霸气的帝王诗 知乎 编辑:程序博客网 时间:2024/06/14 11:15

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,Safarixmlhttp=new XMLHttpRequest();}else{//code for IE6,IE5xmlhttp=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="点击" onclick="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进行记录:




0 0
原创粉丝点击