前臺(tái)向后臺(tái)傳參权逗,一般有如下幾種方式:
1)URL方式傳參
這種方式傳參時(shí)谣光,首個(gè)參數(shù)置于url的后面弹谁,用“?”連接茸塞;形式:url?param=value
如:http://zhidao.baidu.com/q?word=%D6%BD%B1%D2+%CB%BA%BB%D9
多個(gè)參數(shù)時(shí),參數(shù)間用“&”連接描沟,
例如:http://zhidao.baidu.com/q?word=%D6%BD%B1%D2+%CB%BA%BB%D9&lm=0&fr=search&ct=17&pn=0&tn=ikaslist&rn=10
URL傳參很方便飒泻,但是在應(yīng)用時(shí)鞭光,有2個(gè)缺陷:
1)單個(gè)參數(shù)的value不能超過1920000個(gè)字節(jié)。本文這里暫時(shí)定義為大參數(shù)泞遗。
2)傳遞bean時(shí)很麻煩衰猛。
有種劣質(zhì)方法可以辦到,就是將bean的屬性均需作為一個(gè)參數(shù)連接到url里傳遞刹孔。
比如要傳遞一個(gè)人這個(gè)類(有身高和性別)到后臺(tái),
前臺(tái):var pepole = {age:22,sex:'male'}
要是直接把pepole拼接到url里:url?pepole=pepole娜睛,后臺(tái)在不設(shè)置struts參數(shù)解析攔截器時(shí)髓霞,以string接收將會(huì)是一個(gè)object Object。
假如后臺(tái)action里聲明的是這個(gè)bean類型屬性畦戒,可以實(shí)現(xiàn)的方式是:url?pepole.age=22&pepole.sex=male
要注意的是:URL里點(diǎn)后面的age和sex最好跟pepole的age和sex大小寫相同方库!
這樣后臺(tái)就直接接收到了一個(gè)bean。
想想看障斋,如果bean屬性很多纵潦,這讓前臺(tái)的兄弟情何以堪?
所以垃环,這種方法適合bean屬性少的情況邀层,且不追求優(yōu)雅的代碼規(guī)范下寫寫。
2)jQery或Ajax方式傳遞
先說Ajax方式遂庄,這種方式手冊(cè)上用法多的是寥院,這里只講講大字串參數(shù)時(shí),例如
Ext.Ajax.request( {
url : path+'/abc/abcAction!pramaTest.action',
success: function(response) {//這里要處理pramaTest的返回service
},
failure: function(response) {
},
params: {
data : this.veryLongJsonStr,
data2 : Ext.encode(this.veryLongJsonStr)
}
});
this.veryLongJsonStr是個(gè)長(zhǎng)度超過1920000字節(jié)的JSON字符串涛目。
可有清楚一點(diǎn)是:Ajax可有傳遞大數(shù)值參數(shù)
再說jQery方式秸谢,比如API上的一個(gè)例子:
$.post(url,
{ name: "John", time: "2pm" },
function(data){
alert("Data Loaded: " + data);
}
);
jquery方式也是可以處理傳遞大數(shù)值參數(shù)的。
3)form的post方式
var frm = document.getElementById("xxform");
frm.action=path+'/abc/abcAction!pramaTest.action';
frm.submit();
xxform里預(yù)置一個(gè)hidden的標(biāo)簽霹肝,在submit之前可以把veryLongJsonStr賦值給這個(gè)隱藏的控件估蹄。這樣,form的post方式也是可以傳遞大參數(shù)的沫换。不過臭蚁,可能會(huì)存在安全問題。
一般苗沧,我們處理這樣的前后臺(tái)交互刊棕,還是使用Ajax、jquery這樣的成熟的框架來做這些細(xì)微的事情待逞,比較妥當(dāng)甥角。