在公司的项目中用jquery很久,一直没错,今天突然自己想让jquery请求servlet,然后让servlet返回一个字符串,起初我怀疑不是json格式的数据,前端的js不接受不是json格式的数据,后来,自己拼了一个json格式的字符串,意想不到的事发生了,前端的js的jquery回调函数还是取不到数据,仔细研究一番,终于发现了问题的症结。
开始,我在项目的servlet直接out.print("test"); 结果前端的js没有反应,我想可能是out.print()里边的数据不是json格式的,接下来自己拼了个json格式的数据,就是下边这个:"[{'age':'40','name':'张翠山','sex':'男'}," + "{'age':'109','name':'张三丰','sex':'男'}]"; 我觉得这个应该是json格式的数据了吧,但是,让我十分纳闷的是前端的js的回调函数还是没有反应。
接下来,我找了将数据格式化为json格式的工具及其相关的jar包,数据json格式化所需的jar包如下:
commons-beanutils-1.8.3.jar
commons-collections-3.2.1.jar
commons-lang-2.5.jar
commons-logging-1.1.1.jar
ezmorph-1.0.6.jar
json-lib-2.3-jdk15.jar
以上jar包是将数据json格式化的必须的,缺一不可,否则运行时,程序报classnotfound exception,之后我将上边json里边的两条数据封装成对象,然后放到一个泛型list列表里边,用下边的语句将List数据json化:test=JSONArray.fromObject(slist).toString(); 然后让程序运行,这回前端的JS回调有了剧烈反应,终于有反应了,但是程序给的json串让我难以理解: [{"age":"40","name":"张翠山","sex":"男"},{"age":"109","name":"张三丰","sex":"男"}],难道" ' "这个符号前端的Js不认识吗?经过反复尝试,我可以下结论,果然,jquery请求servlet,servlet响应的数据可以是json或xml,但是json我肯定的是必须是:[{"age":"40","name":"张翠山","sex":"男"},{"age":"109","name":"张三丰","sex":"男"}]这种样式的。
难道为了用jquery发起ajax请求,还得必须引用那么多jar包吗?我看了一下2M多,不小。
其实,不必引入数据json专门格式化的,我们可以自己拼json格式的数据,但是程序又不识别“ ' ”,怎么办?有办法,用转义符"\",这回转义符号起到了决定性作用,拼好的数据如下:"[{\"age\":\"40\",\"name\":\"张翠山\",\"sex\":\"男\"}," + "{\"age\":\"109\",\"name\":\"张三丰\",\"sex\":\"男\"}]"; 虽然数据丑了点,但是不用引入那么多jar包就可以数据格式化为json格式的了。
再回到自己的那个问题,那就可以将test字符串一个数据拼成json格式的再out.print(),就可以完成jquery的ajax的请求了。