这篇文章其实是我参考了众多博客(给与突出贡献的有五个)然后实践成功的。由于我在实现的时候遇到了很多错误(所以才会参考了那么多博客),无法一一记下,但我会把注意的地方我会指出。有些对不起大家的地方是我不给出完整的例子了,我只说注意的地方。
我是用struts2做的,顺便还练习了一下 package 的namespace的使用
前台:
<%String path=request.getContextPath(); %>//得到网站的的位置
$.ajax({
type:"post",
url:"<%=path%>/ajax/ajaxTagLx",// /ajax 是命名空间,ajaxTagLx是要访问的函数
data:{ //要传的JSON参数
name3:"aa"
age:21
},
dataType:"json",//设置需要返回的数据类型
//contentType: "application/json;charset=utf-8", 这个不可以加,与我之前用的ASP的不一样
success:function(data){
//var d = eval("("+data+")");//将数据转换成json类型
var d=JSON.parse(data); //这种也行
//得到的是js的对象,然后我们就可以用 d.name,d.age了
},
error:function(){
alert("与服务器连接失败");
}
});
一般上面的代码包含在函数中调用。
后台部分:
private String name3; //action 会自动映射数据到名字一模一样的,只要有get set方法
private String result;//要返回的参数,这个是在strut.xml中可以看出
public String ajaxTagLx(){
System.out.println(name3); // 第一种得到传来参数的方法
try {
HttpServletResponse response;
HttpServletRequest request;
HttpSession session;
response = ServletActionContext.getResponse();
request =ServletActionContext.getRequest();
String name2 = request.getParameter("name3"); //第二种得到传来参数的方法
String age = request.getParameter("age");
//将数据存储在map里,再转换成json类型数据,也可以自己手动构造json类型数据
//感觉用map是必须的。
Map<String,Object> map = new HashMap<String,Object>();
map.put("name", name2);
map.put("age",age);
JSONObject json = JSONObject.fromObject(map);//将map对象转换成json类型数据
//我在上面这个地方调试了很久,后来增加几个jar包就没错了 ******
result = json.toString();//给result赋值,传递给页面
} catch (Exception e) {
e.printStackTrace();
}
return SUCCESS; //必须有这个要不然不行。
//我觉得如果用 PrintWriter 那么就不用 result 和这个 返回值为String的函数了
}
/*
get set 方法
*/
我 的部分出错地方都在注释中。
struts部分:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<constant name="struts.devMode" value="true" />
<constant name="struts.i18n.encoding" value="UTF-8"></constant>
<package name="synonympkg" namespace="/" extends="struts-default">
<!--package bg -->
<action name="initdatabase"
class="showDemo" method="initdatabase">
<result name="success">index.jsp</result>
</action>
<!--package ed -->
</package>
<!-- 由于要 extends="json-default" 我又弄了个package 而且为了学习加了个namespace(必须以'/'开头) -->
<package name="ajax" namespace="/ajax" extends="json-default">
<!--class 为 src中你的.jAVA文件-->
<action name="ajaxTagLx" class="code.action.LxAction" method="ajaxTagLx">
<result type="json">
<!--name必须为root,result是Action中的要返回给前台的属性名 小心上面还有 type="json"
让我奇怪的是 result 不加 name="success" 也可以,完全不懂
-->
<param name="root">result</param>
</result>
</action>
</package>
</struts>
我 的部分出错地方都在注释中。
最后说明一下一定要有的jar包,当然不是struts2必须有的,而是实现 JSON必须有的。我就是这里一直错。这些包貌似不能少一个。
另外注意不要有 jsonplugin-0.34.jar
写一下方便搜
commons-beanutils-1.8.0.jar
commons-collections-3.2.1.jar
commons-lang-2.4.jar
commons-logging-1.1.1.jar
ezmorph-1.0.6.jar
json-lib-2.1.jar
struts2-json-plugin-2.1.8.1.jar
结束了。本来打算学ajaxTags可是怎么也弄不好。