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

    
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          < href ="#"  mce_href ="#"  id ="go" > text </ a >   
26      </ div >   
27      </ form >   
28      </ body >   
29 </ html >


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

 1 jQuery( 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后的字符串,如图:
使用JQuery+Struts1.3实现JSON的post传递

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

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

 

1 Enumeration < String >  e  =   request.getParameterNames();   
2 while (e.hasMoreElements()) {   
3    System.out.println(e.nextElement());   
4}
 

怎么样,是不是发现传过来的json安安静静的出现在了控制台上?对的,它是以数据的name传过来的,这也就是为何需要再对其进行一次包装的原因了。下面的东西嘛,就好办了。在action中使用request.getParament即可取到心仪已久的json格式字符串了。

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


你可能感兴趣的:(JavaScript,jquery,json,Ajax,ssh)