日期:2014-05-18  浏览次数:20693 次

大神看过来,ajax调用Action问题,不能走回调函数。贴出代码给看看是哪儿的问题
最近写了一个小练习,关于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>
struts2 ajax

------解决方案--------------------
 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有什么意义么?

其实的没看出来哪里有问题。。。我用这个时间也不长,也不是很熟,如果指错了,请谅解。

------解决方案--------------------
楼主的问题有点多....。楼主你先明确你要用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的开发文档里面说的很详细了
------解决方案--------------------
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);
});


------解决方案--------------------
 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);