本文将主要说明Ajax与Action数据交互的实现过程,前端使用JQuery中Ajax的相关方法,get或者post,将数据以Json格式传回到业务调度Action中,Action中处理后,再讲数据以Json格式返回给前端。
前端Ajax请求
可以使用get或者post两种方式向服务器发送请求,首先先熟悉get的打开方式。
整体方法结构:$.get(url [, data] [, callback] [, type])
- url:请求的HTML页的URL地址
data(可选):发送至服务器的key/value数据会做为QueryString附加到请求URL中
callback(可选):载入成功时回调函数(即当Response的返回状态为success才调用)自动将请求结果和状态传递给该方法
type(可选):服务器端返回内容的格式,包括xml,html,script,json,text和_default.
例子,使用get向后台请求数据
$.get(
"getSafeEvent.action",//请求的action相对路径
function (jsonStr) {
var StrArray = eval(jsonStr); //解析json数据
var event_type = StrArray[0].type;
},
"json"
); //从后台获取所有数据
同样也可以使用post向后台请求,使用方法和get基本相同。例子,使用post发送数据
var eventJson = {
"lng": e.point.lng,
"lat": e.point.lat,
"time": timeValue,
"address": addressValue,
"type": typeValue,
"content": contentValue
}
$.post(
"addNewEvent.action",
eventJson, //需要发送的Json数据
function (data) {
marker.setTitle(data);
},
"text"
);
后台服务Action
以上文中的get请求为例,给出相应的action处理代码
public class GetSafeEventAction {
public void execute() throws Exception {
ActionContext ac = ActionContext.getContext();
List<WeiBoContent> contents = ContentWithGeoFinder.getContentWithGeo();
HttpServletResponse response = (HttpServletResponse) ac.get(ServletActionContext.HTTP_RESPONSE);
response.setContentType("text/html;charset=utf-8");
response.getWriter().write(JSONArray.fromObject(contents).toString());
}
}
注意到Action的返回方法被省略了,因为处理结果直接通过response输出到前端,这里使用到了JSON库的JSONArray方法来将一个Java Object转化为Json数组。实际运行action返回的值如下所示:
{//Json数组开始
//Json格式的对象
{"addr":"虞城","content":"#商丘微求助# 在虞城新建路月轩网吧丢失一个钱包,钱包里有两千多现金,身份证,银行卡等证件;钱不重要,主要是证件之类的。有小偷照片,听说叫吴振宇,大概15,6岁…希望有认识的朋友帮下忙,找到重谢 |秒拍视频 .","fatherId":8942,"id":8942,"isShow":"yes","lat":"34.369072","lng":"115.91422","time":"2015-012-01:2015-012-30","type":"安全","username":"商丘那点事"}
{"addr":"瓮安","content":"#黔南身边事#【神秘小偷猖狂搜遍瓮安中学校园,数名学生被盗】网友爆料:6月27号凌晨3点左右,瓮安中学被一头戴鸭舌帽,面戴口罩,手拿电筒的男子潜入教学楼,挨个教室搜了个遍,高一、高二数名学生被盗。沒有了生活费的学生很无奈,试问校园警务你的安保工作是怎么开展的,还能不能保证让学生安心的读...展开全文c","fatherId":8911,"id":8911,"isShow":"yes","lat":"27.17234","lng":"107.42141","time":"2015-012-01:2015-012-30","type":"安全","username":"黔南头条"}
}//Json数组结束
其中WeiBoContent对象的结构如下:
public class WeiBoContent {
private String username;
private String content;
private String time;
private String lng;
private String lat;
private Integer id;
private String type;
private String addr;
private Integer fatherId = 0;
private String isShow = "yes";
}
Struts配置
<struts>
<package name="com.eventMap.struts2" extends="struts-default" >
<action name="getSafeEvent" class="actions.GetSafeEventAction"> </action>
</package>
</struts>
配置只需要将逻辑action与实际action链接即可,因为没有action中没有return方法,所以这里也就不需要为其配置result。