1. 程式人生 > >前後臺互動的傳參方式與大引數傳遞

前後臺互動的傳參方式與大引數傳遞

1)URL方式傳參
這種方式傳參時,首個引數置於url的後面,用“?”連線;形式:url?param=value
如:http://zhidao.baidu.com/q?word=%D6%BD%B1%D2+%CB%BA%BB%D9
多個引數時,引數間用“&”連線,
例如: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傳參很方便,但是在應用時,有2個缺陷:
1)單個引數的value不能超過1920000個位元組。本文這裡暫時定義為大引數。
2)傳遞bean時很麻煩。
有種劣質方法可以辦到,就是將bean的屬性均需作為一個引數連線到url裡傳遞。
比如要傳遞一個人這個類(有身高和性別)到後臺,
前臺:var pepole = {age:22,sex:'male'}
要是直接把pepole拼接到url裡:url?pepole=pepole,後臺在不設定struts引數解析攔截器時,以string接收將會是一個object Object。

假如後臺action裡宣告的是這個bean型別屬性,可以實現的方式是:url?pepole.age=22&pepole.sex=male
要注意的是:URL裡點後面的age和sex最好跟pepole的age和sex大小寫相同!
這樣後臺就直接接收到了一個bean。

想想看,如果bean屬性很多,這讓前臺的兄弟情何以堪?
所以,這種方法適合bean屬性少的情況,且不追求優雅的程式碼規範下寫寫。

2)jQery或Ajax方式傳遞
先說Ajax方式,這種方式手冊上用法多的是,這裡只講講大字串引數時,例如
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是個長度超過1920000位元組的JSON字串。
可有清楚一點是:Ajax可有傳遞大數值引數

再說jQery方式,比如API上的一個例子:
$.post(url,
       { name: "John", time: "2pm" },
       function(data){
          alert("Data Loaded: " + data);
       }
);
jquery方式也是可以處理傳遞大數值引數的。


3)form的post方式
var frm = document.getElementById("xxform");
frm.action=path+'/abc/abcAction!pramaTest.action';
frm.submit();

xxform裡預置一個hidden的標籤,在submit之前可以把veryLongJsonStr賦值給這個隱藏的控制元件。這樣,form的post方式也是可以傳遞大引數的。不過,可能會存在安全問題。

一般,我們處理這樣的前後臺互動,還是使用Ajax、jquery這樣的成熟的框架來做這些細微的事情,比較妥當。