您的位置:首页 > 编程语言 > Java开发

struts,ajax之间的json传递

2014-08-15 15:23 190 查看
var json = eval("("+data.result+")");//result在data中

alert("array:"+json[0].username);

$.each(json,function(index,item){

$("#result").append(index+":"+item.username+" "+item.userpassword+"<br/>");

作为一个刚接触json,这几天被json和struts弄得晕头转向的新手,到现在终于有点感悟,终于把测试的demo写了几种方法,终于有点清楚……

也感谢网上各位前辈的贴子代码,所以更要总结一番,给像我一样的后来者一点方便。。

对新手看了一定会有收获的。。有问题大家请指正~

json作为一种被广泛应用的数据交换格式,简单点说就是一串被序列化的字符串。

struts的action和前台的js之间的json传递,主要也就是这个字符串的封装和解析。。

struts把对象(包括List等)序列化为一个字符串,再传给js,js通过var json = eval("("+xxx+")");的方式解析json字符串为js对象,并使用其属性是较常用的一直方式。实现方式有:

一、action中通过根据源对象user新建JSONObject对象obj,再把obj转为string后write到前台:

[java] view
plaincopy

public String showUser(){

User user = (User) userDAO.findByUsername("king").get(0);

JSONObject obj=new JSONObject(user);

try {

result=array.toString();<span style="white-space:pre"> </span>//得到序列化对象后的string<span style="white-space:pre"> </span>可以无setter、getter方法

HttpServletResponse response = ServletActionContext.getResponse();

response.setContentType("text/html"); // 火狐浏览器必须加上这句

response.setCharacterEncoding("UTF-8");

response.getWriter().write(result); //直接write到前台,struts.xml的result里什么都不用配

} catch (Exception e) {

e.printStackTrace();

}

return Action.NONE;

}

前台:

[javascript] view
plaincopy

$(document).ready(function(){

$("#btn").click(function(){

$.ajax({

type: "POST",

url: "user!showUser",

dateType: "json",

success: function(data,status){

alert(status);

<span style="white-space:pre"> </span><span style="white-space:pre"> </span>alert("data"+data);

<span style="white-space:pre"> </span>var json = eval("("+data+")");<span style="white-space:pre"> </span>//此处data即为action里的result,是字符串,要转为js对象<span style="white-space:pre"> </span>

<span style="white-space:pre"> </span>alert("json.user.username"+json.user.username);

}//end of success

});//end of ajax

});//end of click

});//end of ready

二、不用write,直接return json,要配置struts.xml:

[java] view
plaincopy

public String showUser(){

List users = userDAO.findByUsername("king");

User user = (User) userDAO.findByUsername("king").get(0);

System.out.println("username"+username);

try {

[java] view
plaincopy

<span style="white-space:pre"> JSONObject obj=new JSONObject();

<span style="white-space:pre"> </span>obj.put("user", user);

<span style="white-space:pre"> </span>result=obj.toString();</span>

[java] view
plaincopy

<span style="white-space:pre"> } catch (Exception e) {

<span style="white-space:pre"> </span>

<span style="white-space:pre"> </span>return "result";

<span style="white-space:pre"> </span>} </span>//引号勿漏

struts.xml:注意json-default和type=“json"

[html] view
plaincopy

<package name="userpk" extends="json-default" >

<action name="user" class="userAction">

<span style="white-space:pre"> </span> <result type="json" name="result">

[html] view
plaincopy

<span style="white-space:pre"> </result></span>

[html] view
plaincopy

<span style="white-space:pre"> </action>

<span style="white-space:pre"> </span></package> </span>

前台js:

[html] view
plaincopy

$(document).ready(function(){

$("#btn").click(function(){

$.ajax({

type: "POST",

url: "user!showUser",

dateType: "json",

data: {"username":"wang"},

success: function(data,status){

alert(status);

[html] view
plaincopy

<span style="white-space:pre"> alert("data"+data);<span style="white-space:pre"> </span>

<span style="white-space:pre"> </span>var json = eval("("+data.result+")");<span style="white-space:pre"> //result在data中<span style="white-space:pre"> </span> </span>

<span style="white-space:pre"> </span>alert("data.username"+json.user.username);</span>

[html] view
plaincopy

<span style="white-space:pre"> }//end of success

<span style="white-space:pre"> </span>});//end of ajax

<span style="white-space:pre"> </span>});//end of click

<span style="white-space:pre"> </span>});//end of ready</span>

三、JSONArray处理方法如上,同样是传输json字符串result,传输方法多种,产生字符串代码方法如下:

[java] view
plaincopy

JSONArray array = new JSONArray();

array.addAll(users);//users为list

result=array.toString();

前台js处理稍有不同,success内方法代码如下:

[javascript] view
plaincopy

var json = eval("("+data.result+")");

$.each(json,function(index,item){

$("#result").append(index+":"+item.username+" "+item.userpassword+"<br/>");

});

四、List的处理可以用map方式,如下:

就直接上别人源码了:

[java] view
plaincopy

public String testByAction() {

// dataMap中的数据将会被Struts2转换成JSON字符串,所以这里要先清空其中的数据

dataMap.clear();

User user = new User();

user.setId("123");

user.setName("JSONActionStruts2");

user.setPassword("123");

user.setSay("Hello world !");

dataMap.put("user", user);

// 放入一个是否操作成功的标识

dataMap.put("success", true);

// 返回结果

return SUCCESS;

}

struts.xml:

[html] view
plaincopy

<package name="json" extends="json-default" namespace="/test">

<action name="testByAction"

class="cn.ysh.studio.struts2.json.demo.action.UserAction" method="testByAction">

<result type="json">

<!-- 这里指定将被Struts2序列化的属性,该属性在action中必须有对应的getter方法 -->

<param name="root">dataMap</param>

</result>

</action>

</package>

});

原文链接:http://blog.csdn.net/kamouswjw/article/details/8117377
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: