关于SSH+AJAX传参的问题,求各位高手解答

inyesha520 2014-06-16 10:09:34
struts.xml
<struts>
<constant name="struts.objectFactory" value="spring"></constant>
<package name="oasystem" namespace="/" extends="struts-default">
<action name="login" class="UsersAction" method="login">
<result>index.jsp</result>
<result name="login">login.jsp</result>
</action>


<action name="Verify" class="RestAction" method="verify">
<result>rest_verify.jsp</result>
<result name="fail">index.jsp</result>
</action>
</package>


<package name="oasystem_json" namespace="/" extends="json-default">
<action name="passVerify" class="UsersAction" method="passVerify">
<result type="json"></result>
</action>
</package>


action类

private Rest rest;
private IRestService irs = new RestService();
public String passVerify(){
irs.updateVerify(rest);
return SUCCESS;
}


service类
	ApplicationContext ac;
RestDAO dao;
public void updateVerify(Rest rest){
ac = new ClassPathXmlApplicationContext("applicationContext.xml");
dao = (RestDAO) ac.getBean("RestDAO");
dao.update(rest);


JSP页面

<script type="text/javascript" src="<%=path %>/js/jquery-1.9.1.min.js"></script>
<script type="text/javascript">
$(document).ready(function(){
$("#save").click(function(){
url = "passVerify?rest.restId=3&rest.judge='0'";
//alert(url);
$.ajax({
type:"POST",
url:url,
dataType:"json",
success:function() {
alert(data);
}
});
});
});
</script>

后台测试能更新数据库数据
触发click,没反应,没对话框弹出来,请问到底哪里出问题了
...全文
271 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
ryan1214 2014-06-18
  • 打赏
  • 举报
回复
后台断点调试,前台F12断点调试
qqqsadaqq 2014-06-17
  • 打赏
  • 举报
回复
Ajax出错了,没有数据返回。
一叶飞舟 2014-06-17
  • 打赏
  • 举报
回复
断点调试后台程序,看看执行了吗
为自己喝彩 2014-06-17
  • 打赏
  • 举报
回复
var selectedId = $("input[name='id']:checked").attr('id'); var type = "image" ; //下面定义了一个名字叫add_msg的对象,有属性id、type var add_msg = { "id":selectedId, "type":type }; //后台的定义private Record record ; //下面一句是将后台record对象跟前台 add_msg对象形成映射关系,这样前台的json字符串传到后台,后台的框架可以自动解析成java //对象,如果add_msg是json字符串,那么先将json字符串转换成json对象再映射 var record = {"record":add_msg}; $.ajax({ type : "POST", //data在这个例子只识别json字符串,不识别json对象,通过JSON.stringify(json对象)转变成字符串 data : JSON.stringify(record), url : "appvzt/fsend/fullSendMsg.action", contentType : "application/json", //这是成功访问struts2的action,不出现任何异常的成功回调函数,函数中的data是struts2的返回值,如果是json对象,那么可以通过 // json对象.对象属性 ——直接获取到该对象的属性值 success : function(data) { if(data === null) { alert("暂时不存在该类型消息的群发功能") ; } else if(data.errcode === "0") { alert("发送成功") ; } else { alert(data.errmsg) ; } }, //后台程序如果出现异常,那么错误回调函数就起作用,而上面的成功回调函数不起作用 error : function() { alert("系统异常,请稍后重试!"); } }); ============================Record对象=============================== public class Record { private String id ; private String type ; public String getId() { return id; } public void setId(String id) { this.id = id; } public String getType() { return type; } public void setType(String type) { this.type = type; } } ===========================struts2的result可以是json字符串或者是java对象====================== <package name="fsend" extends="struts-default-json" namespace="/appvzt/fsend"> <action name="fullSendMsg" class="FullSendAction" method="fullSendMsg"> <result type="json"> <param name="root"> bcErrCode //java对象,对应前台的成功回调函数的参数data,如果这里是字符串,那么data就是字符串 </param> </result> </action> </package> ==================================将对象转变成json字符串================================ String infoStr = "" ; try { infoStr = new ObjectMapper().writeValueAsString(java对象); } catch (JsonProcessingException e) { // TODO Auto-generated catch block e.printStackTrace(); } 如果后台放回的是json字符串,那么前面的成功回调函数的data就是json字符串,可以通过 var json对象= JSON.parse(data); 将json字符串转换成json对象,用法跟前面的json对象一样 =============================struts-default-json包的定义================================= <package name="struts-default-json" extends="default"> <!-- 返回json类型数据 --> <result-types> <result-type name="json" class="org.apache.struts2.json.JSONResult" /> </result-types> <!-- 自动把页面传来的json解析成action中的对象 --> <interceptors> <interceptor name="json" class="org.apache.struts2.json.JSONInterceptor" /> <interceptor-stack name="myDefaultStack"> <interceptor-ref name="json" /> <interceptor-ref name="defaultStack" /> </interceptor-stack> </interceptors> <default-interceptor-ref name="myDefaultStack" /> </package> struts2框架天然支持json字符串的自动封装成对象的功能,只需在struts2的配置文件中配置这么一个包即可,包的命名随意 =======================获取java对象的json字符串格式========================= 如果是简单的java对象,那么前台的json对象还是蛮好定义的,但是如果是一个复杂的java对象,那么可以利用前台的成功回调函数,利用alert(data);语句将对象的json字符串打印出现。 -------------------------------------------------------------分割线-------------------------------------------------------------- //将一个json对象转换成json字符串 var navDataStr = JSON.stringify(navData); $.ajax({ type : "POST", // 下面的data在这里可以是一个json对象,但是要与下面的contentType值相对应 //如果data的值改成json字符串,那么contentType的值就要变成"application/json", //'definedMenuJson' 在后台是一个String 变量 data : { 'definedMenuJson' : navDataStr }, url : "appv/zdyvaDefinedMenu.action", contentType : "application/x-www-form-urlencoded", //如果不指定,那么默认也是这个值 dataType : "json", success : function(data) { var resData = JSON.parse(data) ; if(resData === null) { alert("微信服务器无响应,请稍后重试!") ; } else if(resData.errcode === 0) { alert("发布成功") ; } else { alert(resData.errmsg) ; } //alert("发送成功" + data); }, error : function() { alert("系统异常,请稍后重试!"); } }); ================================总结=============================== 如果想要后台自动将前台的数据自动封装,只能使用第一种方式 如果想给后台传json格式数据的字符串,那么两种方式都可以 contentType的默认值是:application/x-www-form-urlencoded dataType没有默认值:jQuery将自动根据相应的MIME信息给success回调函数传值
zy_think123 2014-06-17
  • 打赏
  • 举报
回复
你看看Jquery文档呢?
function (data, textStatus) {
    // data 可能是 xmlDoc, jsonObj, html, text, 等等...
    this; // 调用本次AJAX请求时传递的options参数
}
一个例子:
$.ajax({
   type: "POST",
   url: "some.php",
   data: "name=John&location=Boston",
   success: function(msg){
     alert( "Data Saved: " + msg );
   }
});
tony4geek 2014-06-17
  • 打赏
  • 举报
回复
tony4geek 2014-06-17
  • 打赏
  • 举报
回复
你需要的是json ,有没有返回json.
inyesha520 2014-06-16
  • 打赏
  • 举报
回复
引用 2 楼 zhixinhuacom 的回复:
这种 url = "passVerify?rest.restId=3&rest.judge='0'"; 用的是GET方式提交 还有,你返回的数据时json格式的吗。上面看不出啊。
那后台是没返回值的话,要怎样修改才可以?把datatype删去吗
沸羊羊一个 2014-06-16
  • 打赏
  • 举报
回复
这种 url = "passVerify?rest.restId=3&rest.judge='0'"; 用的是GET方式提交 还有,你返回的数据时json格式的吗。上面看不出啊。
沸羊羊一个 2014-06-16
  • 打赏
  • 举报
回复
后台测试能更新数据库数据,前台没对话框弹出来,说明$.ajax返回数据有问题。F12调试一下页面呗

81,115

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧