日期:2014-05-19  浏览次数:20759 次

Struts2 + ajax + json 相关的问题
action类代码
Java code

 public class CategoryAction extends ActionSupport {
    private List<Category> subcates;
    //。。。。省略get/set方法
    public String getsubcates(){
    subcates=categoryManger.getSubCates(pid);
    return SUCCESS; [color=#FF0000]//注意此处[/color]
    }
 }



action的配置:
XML code

     <package name="json"  extends="json-default" >
        <action name="getsubcatesaction" class="categoryAction" method="getsubcates">
            <result name="success" type="json">
                <param name="includeProperties">
                    subcates\[\d+\]\.id,subcates\[\d+\]\.name
                </param>
            </result>
        </action>
    </package>



jsp页面中 js代码:

JScript code

        function addsubcotes(pid){ 
            alert(pid);
            ajaxUtil("getsubcatesaction.action?pid="+pid,false,true,null,true,
                function(data){
                    alert(data); 
                    var jsonObject = eval('(' + data + ')');
                    var select = document.getElementById("subcate");
                    select.options.length=0;//清空select
                    alert(jsonObject.subcates);
                    for(var i = 0;i<jsonObject.subcates.length;i++){
                        var category = list.subcates[i];
                        slect.add(new Option(category.name,category.id));
                    }
                }
            );
        }



问题:正确的情况下应该是在js中获得List<Category>,结果返回的居然是 “success"字符串,也就是action 的result的name。
不知道怎么个情况,平常这样写都没问题,今天怎么就错了呢?请大神解救。

------解决方案--------------------
<param name="includeProperties">
subcates\[\d+\]\.id,subcates\[\d+\]\.name
</param>

<param name="root">这是我一般的用法
------解决方案--------------------
pid 你传到后台了吗?
------解决方案--------------------
debug 断点调试一下 如果后台没问题 是不是前端 接收对象有问题 firebug 调试 获取前端对象是什么
------解决方案--------------------
控制台-〉所有-〉单击连接-〉响应
------解决方案--------------------
我觉得你在前台返回的success,应该是Getsubcatesaction尖中的方法getsubcates返回的字符串(return SUCCESS),你通过ajax调用getsubcates方法,返回到前台的应该是经过json处理的字符串吧,比如你返回的是list,应该把list转为json字符串,再return出来,由前台ajax捕获,再做eval解析,再输出来。