日期:2014-05-16  浏览次数:20341 次

jQuery ajax与struts2以json形式交互

通过ajax更换div的样式,可能失败的原因:

1、ajax中的cache: false是必须的;

2、查看url是否正确,通过浏览器直接方法url看看是否执行;

3、查看是否有拦截器之类程序,就此拦截(这个很隐蔽,尤其是你都系统不是很熟悉)

4、ajax传递的参数没有传到后台,可能在action中,属性没有设置set方法,还有就是属性的名字不对(-_-!)如:属性名字是uName,那么自动生成的set方法为:setuName,这样action是获取不到这个属性的,改成setUName就ok了,所以命名很重要,否则带来N多麻烦;

5、将mapBean属性的getter方式上设置annotation,如下:

@JSON(serialize = false)
public MapBean getMapBean() {
    return mapBean;
}

?

前台页面部分代码:

$.ajax({
               url :'/test/showJson.action',  //后台处理程序
               type:'post',    //数据发送方式
               cache: false,   //是否缓存
               dataType:'json',   //接受数据格式
               data:"sid="+sid,   //要传递的数据(参数)
               success:_change  //回传函数(这里是函数名)
});


function _change (json) {
    $("#sDIV").removeClass();
    $("#pre").removeClass();
    $("#she").removeClass();

    $("#sDIV").attr("style",json.sMap.style);
    $("#pre").attr("style",json.preMap.style);
    $("#she").attr("style",json.sheMap.style);

    $("#sDIV").attr("id",json.sMap.id);
    $("#pre").attr("id",json.preMap.id);
    $("#she").attr("id",json.sheMap.id);
    }

?



后台struts2(action及配置文件)部分代码:

加入2个包struts2-json-plugin-2.2.1.jar、json-lib-2.1-jdk15.jar

public String ajaxShowJson() {
    try {
        mapBean = testService.getTest(sId);
    } catch (Exception e) {
        e.printStackTrace();
    }
    return SUCCESS;
}


<package name="test_Json" extends="json-default"> 
         <action name="showJson" class="testAction" method="ajaxShowJson">
            <result  name="success" type="json">
            <param name="root">mapBean</param>
            </result>
        </action>
</package>
?

?