`
thinkact
  • 浏览: 82293 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

使用JQuery+Struts1.3实现JSON的post传递

    博客分类:
  • Java
阅读更多
    
json格式的数据传递已经红遍全球,JQuery的AJAX功能自然也可以对其进行进行传递。但是一般的传递都是使用GET方式进行的传递,如果内容不多,数据量不大那还是不错的。但是如果数据量比较大,使用get传递就不太适合,我们自然而然的想到了POST传递。
    网上很多的说法都是使用流来读取请求流中的POST过来的数据。对于使用SSH越来越多的今天,写个doPost方法来接收数据其实并不合适,而我们更多的使用的是Action来进行数据的接收,那Struts中的action如何收到post过来的数据呢?使用网上的流的说法,告诉你,你是接收不到的,具体如何做,往下看。

    先说下工具:JQuery1.2.6+json2.js+Struts1.3+org.son包+jdk1.5

    然后我们来看下页面的内容:




1<%@ page language="java" contentType="text/html; charset=UTF-8"%> 
2<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> 
3<html> 
4    <head> 
5        <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
6        <mce:script type="text/javascript" src="javascript/jquery-1.2.6.min.js" mce_src="javascript/jquery-1.2.6.min.js"></mce:script> 
7        <mce:script type="text/javascript" src="javascript/json2.js" mce_src="javascript/json2.js"></mce:script> 
8        <mce:script type="text/javascript" src="javascript/tt.js" mce_src="javascript/tt.js"></mce:script> 
9        <title></title> 
10    </head> 
11    <body> 
12    <form> 
13    <div> 
14        <input type="text" id="roleId" value="112233" name="roleId" /> 
15        <label><input type="checkbox" value="0" checked="checked" name="type" /></label> 
16        <label><input type="checkbox" value="1" checked="checked" name="type" /></label> 
17        <select id="beginYear" name="beginYear"><option value="2008">2008</option></select> 
18        <select id="beginWeek" name="beginWeek"><option value="51">51</option></select> 
19        <select id="endYear" name="endYear"><option value="2009">2009</option></select> 
20        <select id="endWeek" name="endWeek"><option value="2">2</option></select> 
21        <input type="text" id="productList" value="123,124,125,126" name="productList" /> 
22        <select id="dealerType" multiple="multiple" name="dealerType"> 
23            <option value="">all</option><option value="1">mobo</option><option value="2">sales</option> 
24        </select> 
25        <a href="#" mce_href="#" id="go">text</a> 
26    </div> 
27    </form> 
28    </body> 
29</html>

页面元素不算太少,要提取里面的内容,并将他们传递到action中。下面是tt.js的内容

1jQuery(function($) {  
2    $("#go").click(function(){  
3        var jsonTest = {  
4            roleId:$("#roleId").val(),  
5            type:$("label input:checked").map(function(){  
6              return $(this).val();  
7            }).get(),  
8            beginYear:$("#beginYear").val(),  
9            beginWeek:$("#beginWeek").val(),  
10            endYear:$("#endYear").val(),  
11            endWeek:$("#endWeek").val(),  
12            productList:$("#productList").val().split(','),  
13            dealerType:$("#dealerType").val().join(',')  
14        };  
15        alert(JSON.stringify(jsonTest));  
16        $.ajax({  
17            type: "POST",  
18            url: "json.do?method=list",  
19            data:{newData:JSON.stringify(jsonTest)},  
20            dataType:"json",  
21            success:function(){  
22                alert(1);  
23            }  
24        });  
25    });  
26}); 

执行后,会出现个alert框,里面显示了将对象转换成json后的字符串,如图:



从图上可以看出,我们需要的内容都已经成为了json格式的。下面就会执行JQuery的ajax方法了,Data属性的内容嘛,当然就是转换过的jsonTest了,但是,最重要的东西也出现了:我将转换后的jsonTest又进行了包装,并且是包装在了一个key为newData的json字符串里面了。

各位朋友们,你们在action中取不到流,并不是json字符串没有传递过来,而是,你找错地方了。如果不相信,你可以写上你自己的action,然后在action中写上以下代码:



1Enumeration<String> e =  request.getParameterNames();  
2while(e.hasMoreElements()){  
3    System.out.println(e.nextElement());  
4}
怎么样,是不是发现传过来的json安安静静的出现在了控制台上?对的,它是以数据的name传过来的,这也就是为何需要再对其进行一次包装的原因了。下面的东西嘛,就好办了。在action中使用request.getParament即可取到心仪已久的json格式字符串了。

怎么?你认为是get方式传过来的?怕浏览器长度限制?那你自己去试试看吧,我试过20几W的长度下,FF和IE都没有问题,难道你的数据还能再长?没事,多长都可以的

转自:http://www.blogjava.net/jy00314996/archive/2009/02/20/255839.html

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics