標籤:高效能 sel 執行個體 bsp 輸出 完成 ajax response var
問題5: 使用aspx 頁面執行後台方法,總是要重新整理整個頁面?我想提交後台不重新整理頁面,同時返回參數 執行前台的js 指令碼,就是說類似於像 ajax 的效果一樣,那我們該怎麼做呢?
大家是否已經看了前面的文章,下面我們來總結一下如何去實現?
首先我們要知道 ,我們的aspx 頁面 預設情況下 執行後台 是通過 form1 表單提交到背景,而我們前面 <from> 標籤中,有一個屬性叫做 target的屬性,系統預設情況下是“-self”,就是說返回的資料是指向自己的,表示整個頁面會重新整理,我們想不 重新整理整個頁面,我們只需要 在 介面上 放置一個隱藏的 <iframe>標籤,同時將id=‘from1’ 的表單的屬性target 指向 <iframe> 的name 的值,然後我們就會發現 ,aspx頁面 執行後台後,頁面沒有重新整理了。
上面是對我前一堂課程的總結!!!下面我們來看一下 C# 後台如何傳輸參數到前台,同時讓前台能夠接收到後台傳出的參數????
其實寫過 一般處理常式的人都知道,如何傳遞參數的,使用 Response.Write(“我是好人”);這樣會將 這個值輸入到 iframe 中,但是iframe中我們只需要我們傳入的值,但是我們看到 iframe 中 除了 傳入 我們需要的值之外還有很多我們不要的元素,所以我們要將這些不要的清除掉,怎麼清除掉呢?
我們可以這樣寫
Response.ClearContent(); Response.Write("我是好人"); Response.End();
大功告成,這樣前台 iframe 只顯示我們輸出的值了。
現在出現了另外一個問題,我們的前台如何 判斷 ,後台c# 代碼執行完成後再執行 前台的js方法?
我曾經想過用 用 settimeout 去迴圈判斷 iframe 中內容的值,雖然可以實現,但是容易陷入死迴圈,而且還有時間差,效果遠不如 ajax 。
如果不能這麼做,我們可以從另外一個方面來入手,我們知道 iframe 是有一個load 的事件,我們這裡必須使用 jquery的 事件綁定的方法,使用前要先去除綁定,然後在重新綁定,不然的話 iframe上就會不停的綁定不同的 load事件,代碼執行個體如下:
$("#_NofreshIframe").unbind("load");
$("#_NofreshIframe").bind("load", function () { alert(1) });
我們來測試一下,確實能在後台代碼執行完成後能執行iframe的 load事件。
那我們需要擷取iframe 中的值就很容易了,這裡我們這樣擷取iframe中的值,
var result = $(window.frames["_NofreshIframe"].document).text();
這個方法能相容所有的瀏覽器的所有版本,以及iframe 跨域的問題。
其實說了這麼多,講了這麼多廢話,其實離我們的最終目的快要達到,就是要 打造一個 類似於 ajax 的方法,能夠傳輸到後台,並返回參數,我們需要做的就是對前面的這些東西進行 類似於 ajax post 提交 的 封裝,以及對 後期產生問題的展望!!!!
打造顛覆你想象中的高效能,輕量級的webform架構---無重新整理提交後台並返回參數(第五天)