//js端代码
$(".accept").click(function(){
alert("i was clicked");
$.ajax({
type: "POST",
url: "question/questionAction_changeAccept",
dataType: "json",
success: function(json){ alert("right:"+json.result); },
error: function(json){ alert("error:"+json.result); }
});
});//问题
后台action能够获得请求,并且生成json格式数据(后台能打印出来),问题是前台无法获得返回的值,error弹出的值是 undefinedstrutsajaxjson
$(".accept").click(function(){
alert("i was clicked");
$.ajax({
type: "POST",
url: "question/questionAction_changeAccept",
dataType: "json",
success: function(json){ alert("right:"+json.result); },
error: function(json){ alert("error:"+json.result); }
});
});//问题
后台action能够获得请求,并且生成json格式数据(后台能打印出来),问题是前台无法获得返回的值,error弹出的值是 undefinedstrutsajaxjson
解决方案 »
- gnu.io.RXTXCommDriver使用中出现错误,请帮忙解决
- jboss6.0下启动报错 在线等...
- 我想买一本java书,关于ssh框架的,我也不知道企业里那个框架勇的比较多,请各位师兄指点指点,谢谢
- 入门级问题:如何不使用web.xml映射而调用servlet?
- JAVA解析XML文件
- 每次信心满满的做个项目在开始都会出现各种错误。。
- Hibernate 基于主键的单向1-1
- 谁有完整的替代函数!
- 是否有类似eval()的函数.
- 为什么我在jquery中用ajax流输出的代码里面的效果,在显示页面的时候效果出不来呢?
- jsp 类似qq空间回复,展开剩余回复这个功能怎么实现,有多条回复先隐藏几条,点展开剩余回复全部显示出来?
- 后台图片问题
是否是json格式的问题!
不是json格式的问题:
[{"acceptnumber":0,"accountstatus":0,"address":"上海合胜","area":{"areaname":"上海客服","id":1,"number":"KF100","status":0,"version":0},"company":{"address":"","id":2,"name":"上海合胜","number":"","re":"","tel":"","version":0},"email":"","id":23,"messages":[],"password":"123441","phonenumber":"1234","realname":"诱导","re":"","status":0,"username":"user","version":0}]
正确的配置信息如下:
<result name="success" type="json"></result>
这是我的配置:
<package name="question" extends="json-default" namespace="/question">
<action name="questionAction_*" class="com.mvs.action.QuestionAction" method="{1}">
<result name="success">${pagecontext.request.contextpath}/background/question.jsp</result>
<result name="json" type="json"></result>
</action>
</package>
result是后台存放json的,前台通过struts2就能自动取出。还有json格式也是正确的,本来就是list通过工具转换成json格式的。
<package name="user" namespace="/user" extends="json-default">
<action name="checkUserName" class="com.up.action.CheckUserNameAction">
<result name="success" type="json"></result>
</action>
<action name="ook">
<result>/index.jsp</result>
</action>
</package>
------------------后台------------------------
private String userName;
private boolean ok; public boolean isOk() {
return ok;
} public void setOk(boolean ok) {
this.ok = ok;
} public String getUserName() {
return userName;
} public void setUserName(String userName) {
this.userName = userName;
}
public String execute(){
System.out.println(userName);
if(userName.equals("oop")){
ok=true;
}else{
ok=false;
}
return "success";
}
-------------前台-------------------------
$.ajax({
"url":"/JQueryTest/user/checkUserName.action?userName="+userName,
"type":"GET",
"dateType":"json",
"success":function(date){
if(date.ok){
$("#nameSpan").html("ok!");
}else{
$("#nameSpan").html("error!");
}
}
});
--------------------------------------------------
你看看是否能够帮到你吧 . . .
应该不行,没有跳转的。还是在之前的页面,这就是ajax
这个是我另一个方法的result ,ajax方法的result在下面
5楼已经讲过了!
你alert("right:"+json.result);必须undefined的!
因为你返回的json数据中没有result这个属性!
你这个格式得这样访问!
如果你想取得address这个属性:
json[0].address
如果你想取得company属性里面的name属性:
json[0].company.name而不是你这样json.resultjson格式、遇到[]就是数组、就得用[下标]去访问
{}就是对象、可以直接用".属性"去访问
已经解决了,不是那个result的问题,因为,虽然result不是存放在json里的对象 ,但是struts2可以根据getter方法取出来。
问题出在一个地方,
public Map<String, Object> getRequest() {
return request;
}
把这个getter方法去掉就可以了,虽然不知道原理是什么,但是问题就出在这里。
package com.mvs.action;import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Set;import org.apache.struts2.interceptor.RequestAware;
import org.apache.struts2.json.annotations.JSON;import com.mvs.model.Message;
import com.mvs.model.User;
import com.mvs.service.MessageService;
import com.mvs.service.RoleService;
import com.mvs.util.JsonUtil;
import com.opensymphony.xwork2.ActionSupport;public class QuestionAction extends ActionSupport implements RequestAware{ private Message message;
private Map<String, Object> request;
private MessageService messageService;
private RoleService roleService;
private String result;
@JSON(serialize=false)
public Message getMessage() {
return message;
}
public void setMessage(Message message) {
this.message = message;
}
//不要添加getRequest方法 否则会出现ajax无法回传的问题。
public void setRequest(Map<String, Object> request) {
this.request = request;
}
@JSON(serialize=false)
public MessageService getMessageService() {
return messageService;
}
public void setMessageService(MessageService messageService) {
this.messageService = messageService;
}
@JSON(serialize=false)
public RoleService getRoleService() {
return roleService;
}
public void setRoleService(RoleService roleService) {
this.roleService = roleService;
}
public String getResult() {
return result;
}
public void setResult(String result) {
this.result = result;
}
/**
* 从后台获取问题列表,并输出到页面
*/
@Override
public String execute() throws Exception {
List<Message> list = messageService.getAll();
if(list == null){
System.out.println("list为空");
return "success";
}
//输出问题列表
for (Message message : list) {
System.out.println(message.getNumber());
}
request.put("questionList", list);
return "success";
}
/**
* 转移受理人的方法
* @return
*
*/ public String changeAccept() throws Exception{
Set<User> set = roleService.getUserSet(new Long(3));
List<User> list = new ArrayList(set);
System.out.println(list.size());
result = JsonUtil.ListToJSON(list,"roles");
System.out.println(result);
return "json";
}
}
用response的out肯定是可以的,现在是和struts2框架结合,使用另一种方式处理。问题我已经找到了,不知道各位知不知道其中的原理?
struts2默认会把所有带getter的属性都输出的,所以这就是为什么你把getRequest去掉就可以了,你在这个方法上也加入@JSON(serialize=false)或者在配置文件里的result里加入<param name="excludeProperties">request</param>一样能达到效果
传值做什么 本来就是ajax啊 再说 为result添加了get方法不就可以获取值了么
可以重点查下request属性是如何影响result的。