S2SH+jquery+JSON實現Ajax

直接把QQ日誌搬進來,偷下懶 嘿嘿。
一、準備
  1、S2SH整合相關問題這裏不做過多介紹;

  2.、引入實現Ajax相關的jar包:測試項目中所採用的Struts版本爲struts2.1.8,該版本jar包中包含所需插件(json-lib-2.1.jar,struts2-json-plugin-2.1.8.1.jar),之前版本可能需要下載JSON插件;

  3、引入jquery相關JS文件;

二 、工程中實現Ajax

  這裏以實現二級聯動下拉菜單爲例。

  1、在JSP頁面中編寫前端javascript:項目中使用了jquery的$.getJSON(url,params,function callback(data))函數提交ajax請求到指定url,各個參數的含義爲:

   url:處理請求的地址,本工程中對應Action中的一個方法;

   params:請求參數;

   callback(data):回調函數,即接收到服務器處理結果後前端頁面執行的方法,data爲服務器返回的結果;

  2、Ajax請求的配置:Ajax請求類型有別於一般struts2請求,繼承自json-default,返回結果類型爲json,json-default和“json”的結果類型都在struts2-json-plugin-2.1.8.1.jar的struts-plugin.xml中定義;

   struts.xml中action的配置如下:

   <package name="ajax" namespace="/ajax" extends="json-default">
     <action name="getsub" class="transBfAction" method="getSubAccList">
     <result type="json">
    <param name="excludeProperties">.*hibernateLazyInitializer</param>
    <param name="root">result</param>
     </result>
</action>
</package>

  其中,與一般action配置不同的是package 中的 extends的設置,aciton返回結果result的返回類型;result中的第一個參數是解決hibernate反射關閉的也就是實體中的屬性是另外的實體的問題,有待進一步考察;第二個參數表示返回結果,其值和Action中名稱須保持一致,本項目中在Action類中定義了一個名稱爲result的屬性,在對應方法中將返回值賦值給了result;
  3、前臺JSP接收請求返回結果:本工程使用了JS的eval方法將返回結果data轉換成JSON對象,之後進行處理。

  下面附上JS代碼和相關Action中的代碼:

  JS:$(function(){
  $("#acct").change(function(){
var URL = "/ebank/ajax/getsub.shtml";
params = {'index':$(this).val()};
$.getJSON(URL,params,function callback(data){
var JSON_text = eval("("+data+")");
var myOptions = "";
for(var i=0;i<JSON_text.length;i++){
myOptions +='<option value="' + JSON_text[i].optionValue +'">' + JSON_text[i].optionDisplay + '</option>';
}
$("#subacct").html(myOptions)
});
});
$("#acct").change();
})

$(function(){
$("#acct").change(function(){
var URL = "/ebank/ajax/getsub.shtml";
params = {'index':$(this).val()};
$.getJSON(URL,params,function callback(data){
var JSON_text = eval("("+data+")");
var myOptions = "";
for(var i=0;i<JSON_text.length;i++){
myOptions +='<option value="' + JSON_text[i].optionValue +'">' + JSON_text[i].optionDisplay + '</option>';
}
$("#subacct").html(myOptions)
});
});
$("#acct").change();
})

JS中注意params的寫法, params = {'index':$(this).val()};index將''號;

  Action對應方法代碼:

  public String getSubAccList() {
 String JSON_text = "";

//獲取請求參數
String acctid = this.request.getParameter("index");

  //中間具體數據處理代碼略

......

//將返回結果賦值給result,與struts.xml中一致
this.result = JSON_text;
 return SUCCESS;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章