Esri中国社区 » GIS大讲堂:ArcGIS Server .Net ADF中的AJAX
ArcGIS Server .Net ADF中的AJAX(一)
對于沒有很好的 .net 編程基礎(chǔ), arcobjects 的開發(fā)經(jīng)驗的開發(fā)人員而言,開發(fā) arcgis server 的應(yīng)用是比較費(fèi)勁的。最簡單和最快的學(xué)習(xí)之處就是先整清楚 esri 為我們提供的模板程序,別看這個功能簡單的模板程序,里面包含了各種你開發(fā) arcgis server 應(yīng)用所需要的技術(shù)。 Ajax 技術(shù)就是其中之一。下面講的東西在模版程序中都可以找到應(yīng)用。
我們并不細(xì)究 ajax 復(fù)雜的技術(shù)本身,我們需要的僅僅是 ajax 技術(shù)在我們的 arcgis server 開發(fā)過程中是怎么具體發(fā)揮作用的,是具體怎么使用的。
Ajax 的定義
Ajax 是異步的 javascript 和 xml 的簡稱,它其實是老技術(shù)的一個新組合,因為 javascript 和 xml 都不是新技術(shù),但是 ajax 的應(yīng)用卻給 web 應(yīng)用帶來了很多新的變化。
在 .net 中實現(xiàn) ajax, 基本原理
在 .net 中有一個函數(shù)可以使用客戶端的腳本調(diào)用服務(wù)器端指定的函數(shù)。也就是通過這個方法才實現(xiàn)了 .net 中頁面的無回調(diào)刷新的。
public string GetCallbackEventReference (Control control,string argument,string clientCallback,string context)
參數(shù):
control 處理客戶端回調(diào)的服務(wù)器 Control 。該控件必須實現(xiàn) ICallbackEventHandler 接口并提供 RaiseCallbackEvent 方法。
argument 從客戶端腳本傳遞一個參數(shù)到服務(wù)器端的 RaiseCallbackEvent 方法。
clientCallback 一個客戶端事件處理程序的名稱,該處理程序接收服務(wù)器端事件返回的結(jié)果。
context 啟動回調(diào)之前在客戶端的客戶端腳本信息。腳本的結(jié)果傳回給客戶端事件處理程序。
返回值 調(diào)用客戶端回調(diào)的客戶端函數(shù)的名稱。
返回服務(wù)器端的響應(yīng)函數(shù)是沒有選擇的。必須是服務(wù)器端的 RaiseCallbackEvent ,因此當(dāng)一個頁面中有多個地方需要回調(diào)的時候,就需要使用參數(shù)來區(qū)分。
客戶端的響應(yīng)函數(shù)使用 javascripts 來寫,沒有什么問題,在這里把返回的結(jié)果刷新出來。
服務(wù)器端的實現(xiàn)代碼放在 RaiseCallbackEvent 中,也沒有什么問題。
還有一個問題就是 GetCallbackEventReference 這個函數(shù)放在哪里,
一個位置是放在 page_load 中,
m_copyrightCallback = Page.ClientScript.GetCallbackEventReference(Page, "argument" , "processCallbackResult" , "context" , true );
另一個就是直接放在客戶端的事件當(dāng)中。
<%=ClientScript.GetCallbackEventReference( this , "imagechange" , "ShowServerTime2" , null ) %>
下面這個圖示中就放在了 GetServerTime 這個客戶端事件腳本中,下面這個圖很好的說明了這整個過程,從這個過程中,大家并沒有看到 GetCallbackEventReference 這個函數(shù),而是 WebForm_DoCallback 函數(shù),大家只要理解為 WebForm_DoCallback 是更底層的一個實現(xiàn) ajax 的回調(diào)的函數(shù)就可以了。
理解 ajax 的基本原理,才能較好的理解 ajax 在 arcgis server.Net 中的應(yīng)用。
ArcGIS Server .Net ADF中的AJAX(二)
| Ajax 在 ArcGIS Server 中的應(yīng)用也是遵循基本的那幾個步驟,但為什么使用起來的時候好像感覺摸不著頭腦了呢?因為 .net ADF 提供了一個比較統(tǒng)一的框架,就把最基本的一些函數(shù)進(jìn)行了包裝,根據(jù)自己的模式提供了統(tǒng)一的入口和模式。但是只要再往下推敲幾步就會發(fā)現(xiàn)熟悉的 ajax 的步驟了。這可能會讓你在開始使用的時候會有些糊涂,但也正是這種統(tǒng)一的入口和模式讓我們的工作變得簡單。 ArcGIS Server .Net adf 提供了各種控件,這些控件里面都集中了復(fù)雜的功能,它們的刷新(比如地圖的放大縮小,移動等等)都不是簡單的幾句 javascripts 能夠完成的。這也就是為什么它提供了統(tǒng)一的入口和模式的原因了, web adf 已經(jīng)幫你寫好了很多的響應(yīng)的 javascripts 的代碼。你只需要按照相應(yīng)的格式把刷新請求字符串返回客戶端的相應(yīng)函數(shù), adf 提供的豐富的各種控件的刷新 javascripts 就能夠幫你完成相應(yīng)的刷新操作。但是盡管如此,你仍然有必要了解整個的過程。 1 在工具中使用 ajax ,這是最基本的模式 其中一種最常見的統(tǒng)一模式就是在工具中使用 ajax 了。 自定義工具大家都知道怎么實現(xiàn)了,有很多文檔說明,大家都會在自定義工具的 SeverAction 類中來寫很多功能,然后需要把結(jié)果返回到客戶端去,那么這個過程中就會用到 ajax ,實現(xiàn) ajax 的整個流程過程參見圖 7-2 請仔細(xì)看附圖, 1 頁面加載以后,客戶會在 map 上做操作,比如畫矩形框,那么程序執(zhí)行客戶端的操作,比如 dragrectangle ,那就會激發(fā) javascripts 目錄下面的 MapMouseDown 函數(shù),這個函數(shù)會開始繪制 rectangle ,在這個函數(shù)中,會去執(zhí)行 postback 函數(shù)。 2 postback 函數(shù)中會執(zhí)行 webForm_DoCallback 函數(shù),這個函數(shù)把相應(yīng)的請求發(fā)回到服務(wù)器端, WebForm_DoCallback('Map1',argument,processCallbackResult,context,postBackError,false) ? ? 在上面的步驟中很多都是不需要我們進(jìn)行干預(yù)的,所以我們只需要關(guān)心我們要做的事情就可以了,我們要做的就是 ServerAction 函數(shù)的功能,如果 ServerAction 中的功能都只是更新服務(wù)器端的內(nèi)容,那就簡單了,只需要使用 ao 組件進(jìn)行執(zhí)行就可以了,但是如果需要在 ServerAction 之后刷新客戶端的內(nèi)容的話,這個時候就需要注意了,千萬不要忘記要把相應(yīng)的字符串帶到原來制定好的客戶端的腳本中去。否則即使服務(wù)器的內(nèi)容都已經(jīng)更新了客戶端卻什么反應(yīng)都沒有了。 .split(":::");
?
? ArcGIS Server .Net Web ADF的AJAX(二)續(xù)
|
總結(jié)
以上是生活随笔為你收集整理的Esri中国社区 » GIS大讲堂:ArcGIS Server .Net ADF中的AJAX的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 前端:收集前端开发者手边必备的11款神器
- 下一篇: mysql 实例复制_MYSQL教程My