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;
}
一、準備
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;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.