http://blog.163.com/li8008080@126/blog/static/26419415201053005415997/

 

在struts2中使用返回Json格式的数据碰到的一个问题。
1.在服务端使用struts自带的json工具类JSONUtil.serialize(obj)进行格式转换后返回到前台,同时服务端struts配置如下:
<action
name="PeerComparison-single" class="com.li.testAction"
method="testMethod">
            <param
name="aliases">#{"t":"symbol"}</param>
            <result
type="json" name="success">
                <param
name="callbackParameter">callback</param>
           
</result>           
       
</action>
前台调用方法如下:
$.ajaxSetup({cache:false});
    $.get(
   
    "${ctx}/test.action?p=test",
        {},
       
function(callback){
          
//经测试callback不能在此处,以json的格式访问。原因是在后台已经进行过json的format转换,而在请求后,又通过struts配置的result
type=“json” 进行再次json的format转换,导致到了前台无法识别。
       
});
2.由于在后台format的obj为map类型,所以立马想到撤销在后台的JSONUtil.serialize(obj)操作,直接让map在返回时由struts去format。到前台一调试,仍然不行。map根本就没有被format(map里面有数据,但到了前台却为空)。
3.看来只有绕开struts的返回结果format
json格式。还原后台格式化json数据的操作并修改struts配置:
<action name="PeerComparison-single"
class="com.li.testAction" method="testMethod">
            <param
name="aliases">#{"t":"symbol"}</param>
            <result
type="freemarker" name="success">
               
WEB-INF/template/cache.ftl
            </result>           
 
</action>
4.修改前台调用:
$.ajaxSetup({cache:false});
   
$.getJSON(
        "${ctx}/test.action?p=test",
        {},
       
function(callback){
          
//现在ok了,由于后台已经执行了将数据格式化为json数据。所以此处通过jquery的方法可以直接将服务端传来的符合json格式的数据转化为JavaScript可以识别的json格式并使用。
   
    });