使用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

    然後我們來看下頁面的內容:

<textarea class="xhtml" cols="50" rows="15" name="code"><%@ page language="java" contentType="text/html; charset=UTF-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <mce:script type="text/javascript" src="javascript/jquery-1.2.6.min.js" mce_src="javascript/jquery-1.2.6.min.js"></mce:script> <mce:script type="text/javascript" src="javascript/json2.js" mce_src="javascript/json2.js"></mce:script> <mce:script type="text/javascript" src="javascript/tt.js" mce_src="javascript/tt.js"></mce:script> <title></title> </head> <body> <form> <div> <input type="text" id="roleId" value="112233" name="roleId" /> <label><input type="checkbox" value="0" checked="checked" name="type" /></label> <label><input type="checkbox" value="1" checked="checked" name="type" /></label> <select id="beginYear" name="beginYear"><option value="2008">2008</option></select> <select id="beginWeek" name="beginWeek"><option value="51">51</option></select> <select id="endYear" name="endYear"><option value="2009">2009</option></select> <select id="endWeek" name="endWeek"><option value="2">2</option></select> <input type="text" id="productList" value="123,124,125,126" name="productList" /> <select id="dealerType" multiple="multiple" name="dealerType"> <option value="">all</option><option value="1">mobo</option><option value="2">sales</option> </select> <a href="#" mce_href="#" id="go">text</a> </div> </form> </body> </html></textarea>

頁面元素不算太少,要提取裏面的內容,並將他們傳遞到action中。下面是tt.js的內容:

<textarea class="javascript" cols="50" rows="15" name="code">jQuery(function($) { $("#go").click(function(){ var jsonTest = { roleId:$("#roleId").val(), type:$("label input:checked").map(function(){ return $(this).val(); }).get(), beginYear:$("#beginYear").val(), beginWeek:$("#beginWeek").val(), endYear:$("#endYear").val(), endWeek:$("#endWeek").val(), productList:$("#productList").val().split(','), dealerType:$("#dealerType").val().join(',') }; alert(JSON.stringify(jsonTest)); $.ajax({ type: "POST", url: "json.do?method=list", data:{newData:JSON.stringify(jsonTest)}, dataType:"json", success:function(){ alert(1); } }); }); });</textarea>

執行後,會出現個alert框,裏面顯示了將對象轉換成json後的字符串,如圖:

alert框

從圖上可以看出,我們需要的內容都已經成爲了json格式的。下面就會執行JQuery的ajax方法了,Data屬性的內容嘛,當然就是轉換過的jsonTest了,但是,最重要的東西也出現了:我將轉換後的jsonTest又進行了包裝,並且是包裝在了一個key爲newData的json字符串裏面了。

各位朋友們,你們在action中取不到流,並不是json字符串沒有傳遞過來,而是,你找錯地方了。如果不相信,你可以寫上你自己的action,然後在action中寫上以下代碼:

<textarea class="java" cols="50" rows="15" name="code"> Enumeration<String> e = request.getParameterNames(); while(e.hasMoreElements()){ System.out.println(e.nextElement()); }</textarea>

怎麼樣,是不是發現傳過來的json安安靜靜的出現在了控制檯上?對的,它是以數據的name傳過來的,這也就是爲何需要再對其進行一次包裝的原因了。下面的東西嘛,就好辦了。在action中使用request.getParament即可取到心儀已久的json格式字符串了。

怎麼?你認爲是get方式傳過來的?怕瀏覽器長度限制?那你自己去試試看吧,我試過20幾W的長度下,FF和IE都沒有問題,難道你的數據還能再長?沒事,多長都可以的。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章