ArcGIS Server .Net ADF中的AJAX(一)
对于没有很好的.net编程基础,arcobjects的开发经验的开发人员而言,开发arcgis server的应用是比较费劲的。最简单和最快的学习之处就是先整清楚esri为我们提供的模板程序,别看这个功能简单的模板程序,里面包含了各种你开发arcgis server应用所需要的技术。Ajax技术就是其中之一。下面讲的东西在模版程序中都可以找到应用。
我们并不细究ajax复杂的技术本身,我们需要的仅仅是ajax技术在我们的arcgis server开发过程中是怎么具体发挥作用的,是具体怎么使用的。
Ajax的定义
Ajax是异步的javascript和xml的简称,它其实是老技术的一个新组合,因为javascript和xml都不是新技术,但是ajax的应用却给web应用带来了很多新的变化。
在.net中实现ajax,基本原理
在.net中有一个函数可以使用客户端的脚本调用服务器端指定的函数。也就是通过这个方法才实现了.net中页面的无回调刷新的。
public string GetCallbackEventReference (Control control,string argument,string clientCallback,string context)
参数:
control处理客户端回调的服务器Control。该控件必须实现ICallbackEventHandler接口并提供RaiseCallbackEvent方法。
argument从客户端脚本传递一个参数到服务器端的RaiseCallbackEvent方法。
clientCallback一个客户端事件处理程序的名称,该处理程序接收服务器端事件返回的结果。
context启动回调之前在客户端的客户端脚本信息。脚本的结果传回给客户端事件处理程序。
返回值调用客户端回调的客户端函数的名称。
返回服务器端的响应函数是没有选择的。必须是服务器端的RaiseCallbackEvent,因此当一个页面中有多个地方需要回调的时候,就需要使用参数来区分。
客户端的响应函数使用javascripts来写,没有什么问题,在这里把返回的结果刷新出来。
服务器端的实现代码放在RaiseCallbackEvent中,也没有什么问题。
还有一个问题就是GetCallbackEventReference这个函数放在哪里,
一个位置是放在page_load中,
m_copyrightCallback = Page.ClientScript.GetCallbackEventReference(Page,"argument",0)">"processCallbackResult""context"true);
另一个就是直接放在客户端的事件当中。
<%=ClientScript.GetCallbackEventReference(this"imagechange""ShowServerTime2"null) %>
下面这个图示中就放在了GetServerTime这个客户端事件脚本中,下面这个图很好的说明了这整个过程,从这个过程中,大家并没有看到GetCallbackEventReference这个函数,而是WebForm_DoCallback函数,大家只要理解为WebForm_DoCallback是更底层的一个实现ajax的回调的函数就可以了。
理解ajax的基本原理,才能较好的理解ajax在arcgis server.Net中的应用。
ArcGIS Server .Net ADF中的AJAX(二)
Ajax在ArcGIS Server中的应用也是遵循基本的那几个步骤,但为什么使用起来的时候好像感觉摸不着头脑了呢?因为.net ADF提供了一个比较统一的框架,就把最基本的一些函数进行了包装,根据自己的模式提供了统一的入口和模式。但是只要再往下推敲几步就会发现熟悉的ajax的步骤了。这可能会让你在开始使用的时候会有些糊涂,但也正是这种统一的入口和模式让我们的工作变得简单。 ArcGIS Server .Net adf提供了各种控件,这些控件里面都集中了复杂的功能,它们的刷新(比如地图的放大缩小,移动等等)都不是简单的几句javascripts能够完成的。这也就是为什么它提供了统一的入口和模式的原因了,web adf已经帮你写好了很多的响应的javascripts的代码。你只需要按照相应的格式把刷新请求字符串返回客户端的相应函数,adf提供的丰富的各种控件的刷新javascripts就能够帮你完成相应的刷新操作。但是尽管如此,你仍然有必要了解整个的过程。 1在工具中使用ajax,这是最基本的模式 其中一种最常见的统一模式就是在工具中使用ajax了。 自定义工具大家都知道怎么实现了,有很多文档说明,大家都会在自定义工具的SeverAction类中来写很多功能,然后需要把结果返回到客户端去,那么这个过程中就会用到ajax,实现ajax的整个流程过程参见图7-2 请仔细看附图, 1 页面加载以后,客户会在map上做操作,比如画矩形框,那么程序执行客户端的操作,比如dragrectangle,那就会激发javascripts目录下面的MapMouseDown函数,这个函数会开始绘制rectangle,在这个函数中,会去执行postback函数。 2 postback函数中会执行webForm_DoCallback函数,这个函数把相应的请求发回到服务器端, WebForm_DoCallback('Map1',argument,processCallbackResult,context,postBackError,false) 在上面的步骤中很多都是不需要我们进行干预的,所以我们只需要关心我们要做的事情就可以了,我们要做的就是ServerAction函数的功能,如果ServerAction中的功能都只是更新服务器端的内容,那就简单了,只需要使用ao组件进行执行就可以了,但是如果需要在ServerAction之后刷新客户端的内容的话,这个时候就需要注意了,千万不要忘记要把相应的字符串带到原来制定好的客户端的脚本中去。否则即使服务器的内容都已经更新了客户端却什么反应都没有了。 .split(":::");
ArcGIS Server .Net Web ADF的AJAX(二)续
|