網頁 貼吧 文章 作者 工作  
網頁搜尋
 
 愛PO吧 >> 楓之谷小遊戲 >> 瀏覽文章
回覆 加入我的最愛 與好友分享

PostBack(回傳)與CallBack(回呼)的差別

本被文章 0 次, 共有回覆 1  
0
 
0
本文是我的備份,原始文章在主要網站上面:PostBack(回傳)與CallBack(回呼)的差別 http://www.dotblogs.com.tw/mis2000lab/archive/2008/09/23/postback_callback.aspx 以下章節,是已出版的新書(ASP.NET專題實務)中的第20章 Client CallBack新書上市-- ASP.NET專題實務(文魁出版)===================================================================以前介紹的AJAX功能(本書第十九章),幾乎不用寫程式就可以靠著 ScriptManager + UpdatePanel來完成。但是ASP.NET也有提供手寫版本的AJAX功能,那就是本章介紹的 CallBack(回呼)。使用工具來開發AJAX固然快速,但因為初學者不知其所以然,常常誤用而導致奇怪的執行結果(程式會跑,但結果怪怪的,會出現意料之外的狀況)。本章的CallBack雖然動手寫程式比較累,但流程確定反而不容易出錯。非常適合想要進一步提昇自己功力的讀者,進行自我鍛鍊。
20-1 PostBack(回傳)與CallBack(回呼)的差別
Client CallBack是從ASP.NET 2.0版才開始出現的新產物,透過CallBack我們可以完成AJAX的廣告信.傳真.電話.郵件工具非同步功能。有了前一章使用 UpdatePanel的經驗,現在我們將探討「理論」的部份。CallBack在VS 2008裡面,GridView控制項的屬性就有一個「EnableSortingAndPagingCallBacks」,讓排序與分頁功能,可以使用CallBack。簡單的說,Client CallBack就是由Client端啟動(觸發)AJAX非同步更新的功能。那麼,以前介紹過的PostBack(回傳)與目前介紹的CallBack(回呼)差異在哪裡呢?我們從執行面來分析之:PostBack運作流程:
 網頁的Page事件,觸發PostBack提出POST要求(Request)1. Init2. Load State3. Process PostBack Data4.Load5. PostBack Events6.Save State7. PreRender8. Render9. Unload
 最後跟一般網頁的要求(Request)一樣,Server會回傳一個回應(Response)給對方的瀏覽器。
圖CallBack_01 傳統PostBack的作法。CallBack運作流程:
 網頁的事件觸發CallBack給「Script Event Handler」來處理,然後Script Event Handler提出非同步的要求(Async Request)1. Init2. Load State3. Process PostBack Data4.Load5. CallBack Event6. Unload
 最後把CallBack的結果(即CallBack Result)傳回去,對方(使用者的瀏覽器)就會收到Script CallBack了。
20-2 Client CallBack改進了什麼?
在 ASP.NET Web網頁的預設模型中,使用者會與網頁互動並且按下按鈕,或執行其他動作以產生回傳(PostBack)。然後就會重新建立網頁和控制項、在伺服器上執行網頁程式碼,然後將新的內容(全部的新網頁)送回瀏覽器呈現。這是傳統的NDS-DVDPostBack流程,如下:1. ClientServer(第一次)。,使用者執行某個ASP.NET程式(想瀏覽某個網頁)。富爾特素材2. ServerClient。ASP.NET程式經過IIS翻譯之後,變成HTML網頁,傳給使用者的瀏覽器。(這階段,使用者要等待,因為大量資料傳輸中….)3. ClientServer(互動階段)。使用者看到網頁之後,不管是輸入資料、或是按下按鈕(例如:GridView的編輯模式),資料將會再傳回Web Server,作其他互動。4. ServerClient。處理完成後,「全部的」網頁畫面,又傳到使用者的瀏覽器上,「整個網頁」都作更新。(這階段,使用者要等待,因為大量資料傳輸中….)。……如此週而復始,這些流程就是網頁與用戶的互動模式(不管ASP/JSP/PHP或ASP.NET,都是一樣的)。
圖CallBack_02 傳統PostBack的流程。任何要求都會導致Server重新傳回「整個畫面」的資料。但這種PostBack的傳統方法,有兩大缺點:第一、如果網頁中的Client端指令碼(如JavaScript)是維護某些狀態資訊 (例如:區域變數值),則Client端回傳網頁的動作,並且取得新的網頁內容,一定會摧毀原本的狀態資訊。第二、網頁的回傳(PostBack)需要被Server處理,因此會產生降低Server的效能,使用者也必須等待一段時間,直到Server處理完成並把”全部”的資料傳回給Client端的瀏覽器(如同上述流程的第三與第四狀態)。若要避免遺失Client端狀態、或是減輕Client端(即用戶端,使用者的瀏覽器)與Web Server之間來回往返的處理負載,您可以撰寫Client CallBack(用戶端回呼)的 ASP.NET網頁程式碼。在Client端 CallBack中,用戶端JavaScript的function函式會將網頁要求(Request)傳送至 ASP.NET Web網頁。此網頁會執行其一般生命週期的修改版本。網頁會進行初始化並且建立其控制項與其他成員,然後呼叫特殊標記的方法。這種方法會開始處理編碼,然後將其他用戶端JavaScript的Function函式能夠讀取的值,傳回瀏覽器。(資料來源:微軟MSDN網站)在Client CallBack的整個程序中,網頁會存在使用者的”瀏覽器”內,所以使用者完全不需要等待,反應速度快而且Web Server負擔也輕。相同的作業流程,Client CallBack在上圖的第三與第四階段省了很多時間,加速後的CallBack流程如下:3. ClientServer(互動階段)。使用者看到網頁之後,不管是輸入資料、或是按下按鈕等等。只有使用者觸發的那一小部份,才會傳回Web Server作處理。4. ServerClient。Server處理完成後,只把「需要更新」的那一小部份網頁,傳到Client端(使用者的瀏覽器)。這階段,Server只要處理並傳遞一小部份資料即可,所以Web Server負擔減輕,使用者的瀏覽速度也變快很多…。
.......................後續章節,將會開始寫程式。許多AJAX可以做到的功能,CallBack也可以作得到......... ===================================================================另外,在本書的第十五章 Page類別一文裡面,也提到相關的內容: ===================================================================相關的程式,請看本網站的另外一篇文章---- AJAX與ListView的怪現象? --樣版內,控制項ID重複的問題
好悶的文章,對吧!那麼趕緊看看今日值班正妹,提振一下精神~(點圖可放大)圖片來源:http://www.diggirl.net/diggirl/detail.jsp?linkNo=460579................................................................................................................................................................................................ASP.NET專題實務(文魁出版 / P8187)2008/八月份 天瓏書局排行榜前十名................................................................................................................................................................................................

逛上一篇:   逛下一篇:

作者: cyenpztfx
  (2010-01-09 03:11)
推薦文章: 將本文章推薦到【百度收藏】 將本文章推薦到【YouPush】 將本文章推薦到【udn共享書籤】 將本文章推薦到【Fiigo】書籤

 本文章共有回覆 1 篇,分 1 頁
 聲明:以上內容不代表本站立場,且內容由網友發表提供,若有爭議或違法由發表者承擔,本站將不負責連帶責任,謝謝。

 IPoBar  愛PK  愛遊戲  愛online
新手教學 客服中心 站務公告 交換連結 合作提案 關於我們
 
版權所有©ipobar Ltd., All Rights Reserved.
論壇內會員言論僅代表個人觀點,不代表本站同意其說法,本討論區不承擔由該言論所引起的法律責任