jquery发送JS对象的问题

在jquery的ajax发送中,直接发送js对象

user = {
    name :  "什么",
    age : "100"
}

$.ajax({
    url : "xxxx.do",
    type : "POST",
    dataType : "json",
    data : {

ParaData : user

    },
    success : function(data){
         // do something    
    }
);
servlet中用getReader()取得的是ParaData%5Bname%5D=%E4%BB%80%E4%B9%88&ParaData%5Bage%5D=100样子的数据,这是URL的ASCii编码,用java.net.URLDecoder.decode(String str)解码得到数据样子是,ParaData[name]=什么&ParaData[age]=100
由于getPatameter()方法只能取得name=XXX&age=XXX样子返回的数据,所以用getParameter("name")来取值是取不到值的,必须用JS自带的函数JSON.stringify(str)把JS对象转换成JSON格式
user = {
    name :  "HeroW",
    age : "100"
}
var json = JSON.stringify(user);

$.ajax({
    url : "xxxx.do",
    type : "POST",
    dataType : "json",
    data : {

ParaData : json

    },
    success : function(data){
         // do something    
    }
);
这样servlet中可以就可以用getParameter("ParaData")取得JSON的字符串,再json-lib.jar包的(若JSON为单个对象形式{name : XXX, age: XXX})JSONObject.fromObject(str)或者(若JSON为数组对象形式[{name : XXX , age: XXX}, {name : YYY , age: YYY}])JSONArray.fromObject(str)静态方法把JSON字符串转换成相应的JSON对象
注意:在用fromObject(str)方法时可能会出错
java.lang.ClassNotFoundException: org.apache.commons.lang.exception.NestableRuntimeException
上网查了才知道光加json-lib.jar还不行,还得加commons-beanutils.jar,commons-collections.jar,commons-lang.jar,commons-logging.jar,ezmorph.jar这几个包才行….晕,没加这几个包eclipse是不会出现小红叉的,估计是json-lib.jar包中依赖了这些包,一切都弄好后你就可以用
String data = request.getParameter("ParaData");
JSONObject jo = JSONObect.fromObject(data);
取得JSON对象了,从jquery提交的数据应该是ParaData={"name" : "什么" , "age" : 100}的样子的

Leave a Reply

Your email address will not be published. Required fields are marked *