之前的文章有提到ArcGIS Server93提供了两种AJAX模式,一种是client callback模式,一种是partial postback模式。本篇将主要介绍ArcGIS Server的script. callback解决方案,对应client callback模式。

Client Callback模式,我们称之为客户端回调。使用这种AJAX模式时,处理客户端请求的服务器控件必须实现ICallbackEventHandler 接口。该接口提供了两个方法,GetCallbackResult和RaiseCallbackEvent。通过这两个方法所实现的功能主要是:从客户端 接收一个数据参数,在服务器端获取这个参数,并执行一个实现所需功能的事件,最后返回客户端所需结果数据。 通俗点说,RaiseCallbackEvent就是接收客户端的指令,然后对其进行处理,最后通过GetcallbackResult返回给客户端。这 就是客户端回调的机理。

另 外有几点需要特别说明。一,客户端在请求时实际上调用了WebForm_DoCallback函数,这个函数被包含在ASP.NET System.Web.dll中,是ASP.NET为实现客户端回调提供的一个底层函数,它封装了一些AJAX实现的细节,可以方便开发人员实现快速开 发。二,任何服务器端控件,只要实现了ICallbackEventHandler接口都可以实现对客户端请求的相应,并返回客户端,Page也是一种服 务器控件,它也实现了这一接口。所有的Web ADF控件其实也都实现了这一接口,因此很多情况下我们不需要明确的对ADF控件的内容进行更新,因为它可以自动更新。

下面来看看客户端回调使用的几种情景:
(一)仅由Web ADF控件处理客户端请求

这 种情景的流程如下图所示,服务器端的Web ADF控件处理客户端发来的请求,生成一个或多个CallBackResults,以序列化的JSON字符串传回客户端,交由客户端Web ADF JavaScript的函数processCallbackResult处理。这个函数位于aspnet_client文件夹下的 ESRI.ADF.System.debug.js文件中,是Web ADF JavaScript库用来解析JSON字符串,修改客户端内容的函数。



这 种方案其实经常出现在自定义ToolBarItem实现一些功能的情境下。由于所有的Web ADF控件都实现了ICallbackEventHandler接口,也就意味着这些控件实现了GetCallbackResult和 RaiseCallbackEvent方法。当通过Toolbar与Map进行交互时,会自动调用Map的以上两种方法,实现地图的自动刷新。如下图所 示:


NOTE:这张图是edn的解释图,但是这张图是92版本的,93版本的processCallbackResult函数位于aspnet_client文件夹下的ESRI.ADF.System.debug.js文件中。

另外,有时候也需要更新页面上其他非ADF控件的内容,这可以通过定制CallbackResult实现。

(二)由非Web ADF控件处理客户端请求,Web ADF JavaScript处理服务器响应

下面这两张图描述了和第一种情形类似的过程,只不过将客户端的Web ADF换成了页面上的其他非Web ADF控件。这直接导致服务器端处理客户端请求的控件由Map变成了Page。

这张情况使用的范围更广,因为不可能所有的功能都放到Toolbar上去实现。





(三)由非Web ADF控件处理客户端请求,在客户端自定义JavaScript函数处理服务器响应

这 也是三种情景中最难的一种情况,因为所有的服务器逻辑以及客户端的相应代码都需要设计人员自己定制。下面这段代码中的 customFunction就是我们需要在客户端自己定义的相应函数,它负责处理服务器发来的原始callback字符串。要知道如何解析 callback字符串,就必须知道其构造模式,之前提到的processCallbackResult函数就是这样一个解析函数,我们可以参照它编写我 们的定制函数。
[C#]
string m_ADFCallbackFunctionString =
Page.ClientScript.GetCallbackEventReference(this,"message","customFunction","context","handleError",true);







总结:

总 体上说来,第一种情景比较适合基于Toolbar的应用,第二种情景则应用很广,应该是Server开发人员用得最多的方案,第三种情景则比较适合于对 Server的整个AJAX架构非常清楚,对Callback字符串解析比较了解,并且希望可以定制一些Server所不具有功能的高级开发人员所用。

ArcGIS Server9.3 AJAX系列(二)Client CallBack解决方案的更多相关文章

  1. html5录音功能实战示例

    这篇文章主要介绍了html5录音功能实战示例的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

  2. ios – CLGeocoder错误. GEOErrorDomain代码= -3

    有没有关于apple的地理编码请求的文档?谢谢你提前.更新这是我的整个代码请求解决方法在搜索到答案后,它在Apples文档中!

  3. 应用程序关闭时的iOS任务

    我正在构建一个应用程序,通过ajax将文件上传到服务器.问题是用户很可能有时不会有互联网连接,并且客户希望在用户重新连接时安排ajax调用.这可能是用户在离线时安排文件上传并关闭应用程序.应用程序关闭时可以进行ajax调用吗?

  4. ios – 调用异步方法的方法的单元测试

    我想我有这些代码行:我想为该代码编写一个单元测试.对于initializeHomeData和initializeAnythingElse,我可以编写单元测试,如:我的问题是,如何测试reset()?我应该在testReset()中调用它们,如:但我认为这不是适当的实施.解决方法你是对的.要测试重置,您需要调用reset,而不是内部方法.话虽这么说,重置目前的编写方式使其不可测试.您能够如此轻松地测

  5. swift - The Facade Pattern

    Facade(外观)模式为子系统中的各类提供一个简明一致的界面,隐藏子系统的复杂性,使子系统更加容易使用。

  6. swift - The Proxy Pattern

    我在实际工作中vc也仿照过Foundation的delegate:button:内涵业务逻辑,底层实现;每个button是一个类,业务逻辑需要未知的参数和处理之后未知的结果反馈UI:点击button之后界面的改变,UI实现未知的参数和未知的结果反馈,也就是实现这个代理这样以来UI的定制,很灵活很容易,代码思路依然清晰如初。哪个是主体哪个是代理并不重要关键是看定义所说whichisusedwhenanobjectisrequiredtoactasaninterfacetoanotherobjectorres

  7. swift 闭包的使用

    使用:定义:

  8. swift(ios) webview 的优化

    最近一直在做手机H5的东西,网页写多了,测试也测出问题来了,打开十几个网页后,app出现无响应,app的webview界面出现黑屏等等奇怪的问题。我试了几遍,APP内存占用从20M飙升到100M+,到了100M的时候,xcode被断开了,然后问题就一个个冒出来了-_-!搜索了一下,是uiwebview内存泄漏,然后我就兼容了wkwebview。

  9. swift闭包的使用 -- 类似于OC中的Block

    //点击按钮触发该方法funcbuttonClicked(){if(self.callBack!

  10. Swift2到Swift3语法变化不完整总结

    Swift3语法变化Swift3和Swift2对比,更加安全和更加的面向对象了Swift3废弃了旧版本的C类型的GCD写法,而换成了更加面向对象的全新的GCD写法Swift3闭包在方法内部使用限制的关键字修改为了@noescape(默认值)和@escaping如果在方法内部执行了另一个闭包需要使用到方法参数的闭包,需要加上@escaping关键字Swift3闭包的使用避免循环引用Swift3处理S

随机推荐

  1. xe-ajax-mock 前端虚拟服务

    最新版本见Github,点击查看历史版本基于XEAjax扩展的Mock虚拟服务插件;对于前后端分离的开发模式,ajax+mock使前端不再依赖后端接口开发效率更高。CDN使用script方式安装,XEAjaxMock会定义为全局变量生产环境请使用xe-ajax-mock.min.js,更小的压缩版本,可以带来更快的速度体验。

  2. vue 使用 xe-ajax

    安装完成后自动挂载在vue实例this.$ajaxCDN安装使用script方式安装,VXEAjax会定义为全局变量生产环境请使用vxe-ajax.min.js,更小的压缩版本,可以带来更快的速度体验。cdnjs获取最新版本点击浏览已发布的所有npm包源码unpkg获取最新版本点击浏览已发布的所有npm包源码AMD安装require.js安装示例ES6Module安装通过Vue.use()来全局安装示例./Home.vue

  3. AJAX POST数据中文乱码解决

    前端使用encodeURI进行编码后台java.net.URLDecoder进行解码编解码工具

  4. Koa2框架利用CORS完成跨域ajax请求

    实现跨域ajax请求的方式有很多,其中一个是利用CORS,而这个方法关键是在服务器端进行配置。本文仅对能够完成正常跨域ajax响应的,最基本的配置进行说明。这样OPTIONS请求就能够通过了。至此为止,相当于仅仅完成了预检,还没发送真正的请求呢。

  5. form提交时,ajax上传文件并更新到<input>中的value字段

  6. ajax的cache作用

    filePath="+escape;},error:{alert;}});解决方案:1.加cache:false2.url加随机数正常代码:网上高人解读:cache的作用就是第一次请求完毕之后,如果再次去请求,可以直接从缓存里面读取而不是再到服务器端读取。

  7. 浅谈ajax上传文件属性contentType = false

    默认值为contentType="application/x-www-form-urlencoded".在默认情况下,内容编码类型满足大多数情况。在这里,我们主要谈谈contentType=false.在使用ajax上传文件时:在其中先封装了一个formData对象,然后使用post方法将文件传给服务器。说到这,我们发现在JQueryajax()方法中我们使contentType=false,这不是冲突了吗?这就是因为当我们在form标签中设置了enctype=“multipart/form-data”,

  8. 909422229_ajaxFileUpload上传文件

    ajaxFileUpload.js很多同名的,因为做出来一个很容易。我上github搜AjaxFileUpload出来很多类似js。ajaxFileUpload是一个异步上传文件的jQuery插件传一个不知道什么版本的上来,以后不用到处找了。语法:$.ajaxFileUploadoptions参数说明:1、url上传处理程序地址。2,fileElementId需要上传的文件域的ID,即的ID。3,secureuri是否启用安全提交,默认为false。4,dataType服务器返回的数据类型。6,error

  9. AJAX-Cache:一款好用的Ajax缓存插件

    原文链接AJAX-Cache是什么Ajax是前端开发必不可少的数据获取手段,在频繁的异步请求业务中,我们往往需要利用“缓存”提升界面响应速度,减少网络资源占用。AJAX-Cache是一款jQuery缓存插件,可以为$.ajax()方法扩展缓存功能。

  10. jsf – Ajax update/render在已渲染属性的组件上不起作用

    我试图ajax更新一个有条件渲染的组件。我可以确保#{user}实际上是可用的。这是怎么引起的,我该如何解决呢?必须始终在ajax可以重新呈现之前呈现组件。Ajax正在使用JavaScriptdocument.getElementById()来查找需要更新的组件。但是如果JSF没有将组件放在第一位,那么JavaScript找不到要更新的内容。解决方案是简单地引用总是渲染的父组件。

返回
顶部