調用不同Server上的頁面,傳遞長參數的方法

来源:互联网 发布:大数据与互联网的关系 编辑:程序博客网 时间:2024/05/22 03:25
 
        當兩個系統需要進行整合,即在系統A中的頁面start.aspx鏈接到系統B中的頁面end.aspx時候,如果系統A和系統B是存在于同一個Server上,我們可以考慮的傳值方式可以為QueryString、Cookies、以及Form提交。
        QueryString傳值是應用相當廣泛的一種頁間傳值的方法,但是QueryString的頁間傳值存在著兩點致命的局限:首先就是總所周知的傳遞的值會在地址欄中被明文顯示,當需要傳遞敏感信息數據的時候,這種方式是需要多掂量掂量的~另外一個問題就是傳遞數據的長度的局限性:我曾經做過一個測試,將一條長度為100個漢字的數據進行HtmlEnCode之后進行傳遞,就會由于參數過長而導致地址失效,從而不能準確跳轉,更不要說準確傳遞數據了。因此,QueryString傳值的應用多數還是在長度比較短且不存在敏感信息的場合下。
        Cookies傳值一直被認為是存在著比較大的安全問題的,雖然其自身包含加解密的功能,但一般還是只在保持用戶自定義風格這樣的場合使用。回到我們的主題,兩個不同的系統想要通過Cookies傳值傳值,除了要考慮數據機密性、用戶瀏覽器設置等因素外,還必須保證這兩個系統(系統A跟系統B)是存在于同一個域之下的,這樣除了導致系統耦合度增高以外,也令Cookies數據的存取更加混亂而難以控制。
        在網上進行技術調查的時候,有看到有人指出使用其他的方法實現域間數據共享,他指出『看看sohu.com,他域名够多,他有个crossdomain的js』,具體的內容我還沒有去仔細研究過,等稍后空閑下來一定去找找相關資料。
        但是當A、B不存在于同一個Server的時候,Cookies共享的方式也顯然失去了存在的可能,那么唯一的出路就是本片的重點,Form提交方式。
        Form提交方式其實也相當簡單,思路是在頁面中新建一個Form,將Action設置為想要鏈接到的網址(end.aspx),在該Form中放置幾個Hidden的Input,設置其Name屬性,通過JS腳本將需要傳遞的參數分別寫入到這些HiddenText的Value值之后,調用該Form的submit方法提交。在end.aspx頁面Load中使用Request["HiddenText的Name"]獲取傳遞的數據。如果不希望傳遞的數據在地址欄中出現,可以將該Form的Method設置為Post,而如果end.aspx頁面是以打開新頁面的方式打開,則只需將Form的target屬性設置為-blank即可。
 
下面附帶一些示例代碼:
鏈接的HTML
<A href="#" onclick="OpenEnd()">TestOpenEnd </A>
提交用FormHTML
<form action="end.aspx" target="_blank" method="post" name="postForm" id="postForm">
<input name="formID" type="hidden" value="111">
<input name="empID" type="hidden" value="S0806754">
<input name="category" type="hidden" value="AUO_News_001">
<input name="subject" type="hidden" value="subject111">
<input name="summary" type="hidden" value="summary111">
</form>
 
提交用JS腳本:
 function OpenEnd() {
//提交Form,將彈出窗口定位到ADV頁面并傳遞參數
document.postForm.submit();}
 

另外,當彈出的頁面end.sapx需要以一定的樣式打開時,我們可以先打開一個具備了一定樣式的空白窗口,然后再在Form提交的時候,將該空白窗口定位到end.aspx,這個過程需要注意的是使用window.open打開一個空白頁面的時候,要獲取一個頁面Name,設置為FormTarget

示例代碼如下:

提交用FormHTML
<form action="end.aspx" target="newPageName" method="post" name="postForm" id="postForm">
<input name="formID" type="hidden" value="111">
<input name="empID" type="hidden" value="S0806754">
<input name="category" type="hidden" value="AUO_News_001">
<input name="subject" type="hidden" value="subject111">
<input name="summary" type="hidden" value="summary111">
</form>
 
提交用JS腳本:
 function OpenEnd() {
//首先彈出一個帶樣式的窗口Fit_ENews
window.open('','newPageName','height=600,width=650,top=70,left=190,toolbar=no,channelmode=no,center=yes,directories =no,titlebar=no,menubar=no,scrollbars=yes, resizable=no,location=no, status=no','_parent');
//提交Form,將彈出窗口定位到ADV頁面并傳遞參數
document.postForm.submit();
}
原创粉丝点击