大神看过来,ajax调用Action问题,不能走回调函数。贴出代码给看看是哪儿的问题

謝谢 2013-10-27 10:22:39
最近写了一个小练习,关于struts2+Ajax的小实验,木有想到结果悲剧了。
ajax通过异步调用action,经过我的测试,已经执行了action中指定的方法,并且在后台中打印出了组装后的json字符串,但是程序却不走回调函数,好心人帮忙看下。下面贴一下代码:
struts2配置文件

<package name="test" namespace="/" extends="struts-default,json-default">
<action name="queryOrgans" class="com.mcard.action.BOrgansAction" method="queryOrgByConditions">
<result type="json"/>
</action>
</package>
...全文
227 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
南猿北蛰 2013-10-28
  • 打赏
  • 举报
回复
public String queryOrgByConditions(){ HttpServletResponse response = ServletActionContext.getResponse(); List<BOrgans> borgansList = new ArrayList<BOrgans>(); /*JSONArray jsonArray = JSONArray.fromObject();*/ Gson gson = new Gson(); borgansList = organsService.queryOrgByConditions(organId, name); jsonResult = gson.toJson(borgansList); response.setContentType("application/json; charset=UTF-8"); try { response.getWriter().write(jsonResult); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } System.out.println(jsonResult+"gsongsongson"); for(BOrgans bor:borgansList){ System.out.println(bor.getOrganId()); System.out.println(bor.getName()); } return NONE; } 这个方法改成void看看
-阿克蒙德- 2013-10-28
  • 打赏
  • 举报
回复
HttpServletResponse response = ServletActionContext.getResponse();
response.setCharacterEncoding("utf-8");
response.getResponse().getWriter().writ(jsonResult);
response.getWriter().flush();
response.getWriter().close();
后台是这样的,用ajax的话不用配置什么,假如你前台写的没有问题的话,直接在回调函数里 alert(data);应该会得到值 我比较习惯用jquery的下面的写法
$.post("<%=basePath%>/three/grade_ajaxBackInfo.action",{applyIds:applyId},function(data){
      alert(data);			
});
suciver 2013-10-28
  • 打赏
  • 举报
回复
楼主的问题有点多....。楼主你先明确你要用google的gson还是用struts2自带的json-plugin。 你如果用了gson转换成json格式用response进行输出那么就不要在struts2的配置文件里面使用 <result type="json">在方法里面直接return null。 如果你要用json-plugin就不要用gson来转换正常情况的json-plugin你struts2的配置文件的package要extends="json-default"不可以继承两个。json-default已经extends了struts2-default了。你的业务方法里面要return SUCCESS;<result type="json">不变struts2自然会把action中所有具备get方法的属性以json的格式输出。json-plugin还有其它的设置信息具体的使用就不一一说明了,自己看struts2的开发文档里面说的很详细了
謝谢 2013-10-28
  • 打赏
  • 举报
回复
问题解决了,按照8楼的方法,删除了一些冗余的代码,修改过多就不贴出来了
謝谢 2013-10-27
  • 打赏
  • 举报
回复
引用 6 楼 AA5279AA 的回复:
function doQuery(){ var organsId = $("#organsId").attr("value"); var name = $("#organsName").attr("value"); 这里先加上 alert(organsId);看看是否取到值啊 另外你那种形式我没用过,我用的一般都是 var data = {'name':name}; data:data, 的形式。。 beforeSend : function(XMLHttpRequest) { $("#showOrg").text("数据加载中..."); }, 这里添加XMLHttpRequest有什么意义么? 其实的没看出来哪里有问题。。。我用这个时间也不长,也不是很熟,如果指错了,请谅解。
恩恩. organsId里面是有值的,而且data的这种参数方式也是可以把参数传到后台, 这个beforeSend是可以正确执行的,不过还是谢谢你
失落夏天 2013-10-27
  • 打赏
  • 举报
回复
function doQuery(){ var organsId = $("#organsId").attr("value"); var name = $("#organsName").attr("value"); 这里先加上 alert(organsId);看看是否取到值啊 另外你那种形式我没用过,我用的一般都是 var data = {'name':name}; data:data, 的形式。。 beforeSend : function(XMLHttpRequest) { $("#showOrg").text("数据加载中..."); }, 这里添加XMLHttpRequest有什么意义么? 其实的没看出来哪里有问题。。。我用这个时间也不长,也不是很熟,如果指错了,请谅解。
謝谢 2013-10-27
  • 打赏
  • 举报
回复
引用 4 楼 zhuweisyyc 的回复:
js里你直接打印success方法的data看看
直接不走success和error
zhuweisyyc 2013-10-27
  • 打赏
  • 举报
回复
js里你直接打印success方法的data看看
謝谢 2013-10-27
  • 打赏
  • 举报
回复
还有一个问题,就是我用google浏览器看了一下,请求列表怎么这个样。。
謝谢 2013-10-27
  • 打赏
  • 举报
回复
后台Action代码:

@Scope("prototype")
public class BOrgansAction extends ActionSupport {
	
	@Resource
	private OrgansService organsService;
	private BOrgans borgans;
	private String organId;
	private String name;
	
	private String jsonResult;
	

	/**
	 * 根据条件查询部门信息
	 * @return
	 */
	public String queryOrgByConditions(){
		HttpServletResponse response = ServletActionContext.getResponse();
		List<BOrgans> borgansList = new ArrayList<BOrgans>();
		/*JSONArray jsonArray = JSONArray.fromObject();*/
		Gson gson = new Gson();
		
		borgansList = organsService.queryOrgByConditions(organId, name);
		jsonResult = gson.toJson(borgansList);
		response.setContentType("application/json; charset=UTF-8");
		
		   try {
			response.getWriter().write(jsonResult);
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		System.out.println(jsonResult+"gsongsongson");
		for(BOrgans bor:borgansList){
			System.out.println(bor.getOrganId());
			System.out.println(bor.getName());
		}
		return NONE;
	}
	
	public void setOrgansService(OrgansService organsService) {
		this.organsService = organsService;
	}	
	public String getOrganId() {
		return organId;
	}
	@JSON(name="JSONRESULT")
	public String getJsonResult() {
		return jsonResult;
	}

	public void setJsonResult(String jsonResult) {
		this.jsonResult = jsonResult;
	}

	public void setOrganId(String organId) {
		this.organId = organId;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	
	

}
謝谢 2013-10-27
  • 打赏
  • 举报
回复
前台ajax调用Action的js代码:

  function doQuery(){
    var organsId = $("#organsId").attr("value");
    var name = $("#organsName").attr("value");
    var result="";
     $.ajax({
        url:"queryOrgans.action",//queryOrgByConditions
        type:"POST",
        data:"organId="+organsId+"&name="+name,
        dataType:"json",
        beforeSend : function(XMLHttpRequest) {
          $("#showOrg").text("数据加载中...");
         },
         successs:function(data){
         alert(data.borgansList);
              var orgList = eval('('+data+')');
              alert("成功了");
              if(orgList.length>0){
                  for(var i=0;i<orgList.length;i++){
                       result+="<tr>";
                       result+="<td>"+orgList[i].organsId+"</td>";
                       result+="<td>"+orgList[i].name+"</td>";
                       result+="<td>"+orgList[i].parentId+"</td>";
                       result+="</tr>";
                }
              }else{
                  result="没有要显示的数据!";
              }
        $("#showOrg").html(result);
      }, 
      error:function(data){
      $("#showOrg").innerHTML-"查询机构信息失败,可能服务器忙,请重试!";
      alert(eval('('+data+')'));
          alert("查询机构信息失败,可能服务器忙,请重试!");
    }
     });
   }

67,515

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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