jquery的ajax方式有如下幾種:
1. $.post(url,params,callback);
2. $.getJSON(url,params,callback);
3. $.ajax();
4. $.load(url,params,callback);
第一種:採用post方式提交,中文參數無需轉碼,在callback中如果要擷取json字串,還需轉換一下。
如:
$.post(url,{id: id,code: code, companyId:companyId },function (data){showCompanyRadialDataListdatalist});這個datalist為從後台取回來的資料List。function showCompanyRadialDataList(datalist){ var obj = eval(datalist); }//這個eval可以將data轉成json串。方便後面取值。如:for (var i =0 ; i< obj.length ;i++){ $("td:eq(1)",$tr).htmlobj[i].nuclide);//這裡可以用json方式取datalist裡面的資料 }
第2種方式:getJSON採取get方式提交,所以如果你的params參數裡面有中文的話,請先轉碼,否則會出現亂碼提交到後台。
$.getJSON(url,param,function(jsondata){這裡返回的jsondata可以直接取不用再轉換了。如:jsondata[0].nuclide}
第3種方式:$.ajax, 這種方式最靈活。
$.ajax({ url: url,//地址 data: data,//參數 type: 'POST',//提交方式 可以選擇post/get 推薦post async: false,//同步非同步 dataType: 'json',//返回資料類型 success:function(data){ accidentList = data.list; //這裡可以直接取data裡面的資料了,因為設定傳回值為json方式。 }});
當然$.ajax裡面還有很多參數 可以加更多的特效在裡面,如ajaxStart ,ajaxStop等等,
上面的參數type,async,dataType都不是必須的。
第4種方式:$.load 這種用得很少,一般是來載入某一個頁面或者xml等等。
總結:如果參數中沒有中文,又想直接用json ,那就推薦$.getJSON,如果有中文 那就採用$.post或者$.ajax。
以上轉自:http://pipe.iteye.com/blog/372394#
然而資料轉送方式多種多樣,
以索引值對的字串形式:簡單方便"param1=value1¶m2=value2"
以xml方式:雖然有點麻煩,但是當遇到複雜結構的資料類型時用得上,詳細見:點擊開啟連結
以json方式: JSON 是 JavaScript原生格式,這意味著在 JavaScript
中處理 JSON資料不需要任何特殊的 API
或工具包。點擊開啟連結
然而需要注意的是:jquery.js會與json.js衝突,據說是因為$符號衝突...
1.網上有製作jquery的外掛程式js對象與json互相轉換的jQuery外掛程式
jquery-json
http://blog.csdn.net/mycup163/article/details/7090077
var thing = {plugin: 'jquery-json', version: 2.3};var encoded = $.toJSON( thing );// '{"plugin":"jquery-json","version":2.3}'var name = $.evalJSON( encoded ).plugin;// "jquery-json"var version = $.evalJSON(encoded).version;// 2.3
2.如果不想用json.js可以這樣...手動寫json點擊開啟連結..伺服器發送過來的json可以用jquery的eval("("+data+")")/$.parseJson()轉化為javascript對象
終於到伺服器端了
為了怕以後的開發中出現同樣的問題,現將問題記錄起來
關於json與struts互動的問題
前台技術採用extjs:
strut2提供了支援json的外掛程式
必須繼承json-default、json-default繼承自struts-default.
<package name="json" namespace="/"extends="json-default">
<action name="moduleAction" class="moduleAction">
<result type="json"name="findData">
<paramname="root">datas</param>
<paramname="includeProperties">success,totalcount</param>
</result>
<result type="json"name="findTree">
<paramname="root">result</param>
</result>
</action>
1,result中type設定成json之後,容器會把action的屬性自動封裝到一個json對象中(json攔截器來做),然後調用ajax的callback方法.返回json資料
2,includeProperties參數:輸出結果中需要包含的屬性值,這裡Regex和屬性名稱匹配,可以用“,”分割填充多個Regex。
如<paramname="includeProperties">module.*,user\.userName</param> 表示是module的所有屬性及使用者的使用者名稱
3,excludeProperties參數:輸出結果需要排除的屬性值,也支援Regex匹配屬性名稱,可以用“,”分割填充多個Regex,類同includeProperties
4,為什麼要用includeProperties或excludeProperties 參數:
主要是為了過濾掉介面,pojo的set、list、其它對象等不需要的資料防止迴圈取其它關聯對象或找不到介面。
如果不配置,預設是處理action中的所有屬性,如果action中有介面注入,json攔截器可能找不到介面而返回不了結果,
還有如果action中有一個對象,這個對象與好多個物件都有關聯,json攔截器會將相關聯的所有對象的屬性全部轉換成json格式,
如果其它對象有list、set,其返回結果相當龐大,有可能是死迴圈而無法返回 。
如果不用<paramname="includeProperties">或其他方式進行json資料過濾,通過debug你會發現前台返回的json字串,
是把action中的所有屬性全部轉化成json字串返回給用戶端
(包括service介面、pojo所有屬性及有關聯的pojo。有時候根本返回不了結果,也不報錯,後台執行了,
但前台執行不到callbackfunction,這主要是因為找不到介面或者關聯的pojo太多,造成死迴圈),
一般情況下用的最多的就是root、 includeProperties和excludeNullProperties參數。
當然還有其他的方法,如給pojo的屬性加json註解。
5,result標籤中的name屬性,即表示是struts2中的action類中返回的名稱
如
public String findAllById() throws Exception{
int id=Integer.parseInt(this.request.getParameter("pid"));
List<ModuleBean>list=service.findById(id);
return "findTree";
}
上面代碼return"findTree"就會找到findTree的結果集,並將其封裝起來,返回json給用戶端
因此 action 可以配置多個result