ajax之jquery與struts2通訊

來源:互聯網
上載者:User

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&param2=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

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.