在项目中使用了ajax方式来提交表单,现在记录一下,以便以后复习备用。
在前台使用ajax 方式提交表单,后台使用了 Struts2 的action接收请求,查询数据库,返回一个包含自定义类型对象的List。因为这个List需要在前台页面使用,而又无法将这个List直接返回给前台,所以我找到了org.json这个jar包,将List包装成了 json 类型,通过 response.getWriter().print() 写到前台 jsp 页面,成功返回了List数据,前台再解析这个json 即可。
前端 ajax 代码如下:
$.ajax({
//请求处理页
url:"",
dataType: "json",
type: "POST",
//传送请求数据
data: { "friendName" : $friendName},
beforeSend: function () {
if($friendName == ""){
alert("搜索内容不能为空!");
return false;
}
},
//处理成功返回的数据
success:function(retVal){
$.each(retVal,function(index,element){
}
})
其中 url 为将要处理请求的后台action路径,dataType 为数据返回类型, data 域的值即为需要提交到后台的值,beforeSend 函数是用来做提交前的检查,不满足条件就不提交,success 函数是后台处理成功后的回调函数,retVal 即为后台返回的数据,这里是刚才被包装成 json 的List 数据。
后台 action 代码为:
list = userService.searchUserByName(name);
JSONArray array = new JSONArray(list);
try {
<span style="white-space:pre"> </span>response.getWriter().print(array);
System.out.println("array= "+array);
} catch (Exception e) {
}
注意:使用 org.json 封装的 json 数据的格式为:
[{"eno":"7369","ename":"SMITH"},{"eno":"7499","ename":"ALLEN"}],因此在 success 中直接遍历retVal这个json数组即可,如果在后台手动构造json数据,格式为:
{"emp":[{"eno":"7369","ename":"SMITH"},{"eno":"7499","ename":"ALLEN"}]} ,在 success 函数中就需要使用 eval 函数解析返回的json数组,var obj = eval("("+retVal+")");然后再遍历obj即可