我希望各位看官在看这篇文章之前,先对.NET中内置的Ajax了解较透,如果还不是很明白,建议先看我的上一篇博文.NET内置的Ajax工作原理

ESRI ArcGIS Server 9.2 的web应用开发框架充分利用了ASP.NET中的回调技术。我们来看看利用Visual Studio 模板创建的默认应用程序中如何利用回调的。

首先看到默认的主页面Default.aspx 对应的类 WebMapApplication 实现了 ICallbackEventHandler 接口。
我们再以Identify工具来深入了解应用开发框架。
在 WebMapApplication 类的 Load 事件处理器中,调用 new MapIdentify(Map1) 初始化Identify 工具。在 MapIdentify 类的构造函数中,调用了SetupIdentify 方法。该方法首先通过调用 GetCallbackEventReference 方法来生成客户端脚本,然后调用 RegisterClientScriptBlock 注册一个名为 identifyCallbackFunctionString 的 JavaScript 函数,该函数中调用生成的客户端脚本。
在 display_mapidentify.js 文件的 MapIdClick 函数(Identify 事件处理器)中调用了 identifyCallbackFunctionString 函数,从而触发了 WebMapApplication 类的 RaiseCallbackEvent 方法。
RaiseCallbackEvent  方法不仅需要处理 Identify 工具,还需要处理其他工具,本实例中包括关闭应用程序与获取版权文本。为了在该方法中判断是哪个工具启动了该方法调用,需要在传入在参数中包含表明调用“身份”。同时由于在传入参数中还需要其他可能更多的信息,例如Identify工具,不仅需要表明调用者身份的信息,还需要当前用户单击处 X、Y 坐标信息。为了能在RaiseCallbackEvent  方法中把这些信息都解释出来,本实例使用的是
"参数名1=参数值1&参数名2=参数值2"
式。例如在 MapIdClick 函数中传入的是
"ControlID=Map1&ControlType=Map&EventArg=MapIdentify&Map1_mode=MapIdentify
&minx="+zleft+"&miny="+ztop
而在 RaiseCallbackEvent 方法(或者是 RaiseCallbackEvent 中调用的 一个webservice方法,一个自定义类方法),通过调用 Split("&".ToCharArray ()) 方法将各个 “参数名=参数值” 放置到一组数组中,然后再通过建立哈希表的方式把“参数名” 与 “参数值” 分开,具体的代码如下:
            string[] keyValuePairs;//含有”=“的数组
            string[] keyValue;//只有字符串的数组
            NameValueCollection m_queryString = new NameValueCollection ();//键值对的集合

keyValuePairs = eventArgument.Split("&".ToCharArray ());//eventArgument是客户端传入的参数
             if (keyValuePairs.Length > 0)//如果传递的参数是argA=arg1&argB=arg2……形式的,也就是说参数不止一个
             {
                 for (int i = 0; i < keyValuePairs.Length; i++)
                 {
                     keyValue = keyValuePairs.GetValue(i).ToString().Split("=".ToCharArray());
                      m_queryString .Add(keyValue[0], keyValue[1]);
                 }
             }
             else//传递的参数只有一个
             {
                 keyValue = eventArgument.Split("=".ToCharArray());
                 if (keyValue.Length > 0)//如果有参数传递过来的话
                 {
                      m_queryString .Add(keyValue[0], keyValue[1]);
                 }
             }
             //通过htQueryString["EventArg"]这种方式调用参数的值
             return "您选择的工具名称是: " + m_queryString ["EventArg"].ToString() ;

通过执行上诉的代码后,只需要调用m_queryString ["EventArg"]就能判断是哪个工具启动该方法的调用。如果是 Identify 工具,那么该值就为 MapIdentify 。
        在判断出调用工具是 Identify 后, RaiseCallbackEvent 方法调用 MapIdentify 类的 Identify 方法得到返回值。
        通过解析 Arcserver ADF 中的 Ajax ,就不难理解为什么利用 ArcServer ADF 开发的 webgis 产品中地图的刷新是如此之快了。。。。。。。。。。。。。

转载于:https://www.cnblogs.com/gisland/archive/2009/09/14/1566599.html

ArcGIS Web 应用开发框架(ADF)中的Ajax相关推荐

  1. 【从0到1学Web前端】javascript中的ajax对象(一)

    [从0到1学Web前端]javascript中的ajax对象(一) 如今最流行的获取后端的(浏览器从server)数据的方式就是通过Ajax了吧.今天就来具体的来学习下这个知识吧.假设使用ajax来訪 ...

  2. php ajax 框架,PHP开发框架kohana中处理ajax请求的例子

    这篇文章主要介绍了PHP开发框架kohana中处理ajax请求的例子,kohana是一个PHP5开发框架,需要的朋友可以参考下 今天分享的是在kohana中处理页面的ajax请求.2步搞定.前提是你的 ...

  3. Web开发中的AJAX技术介绍

    读音:e:j^ks .AJAX即"Asynchronous JavaScript and XML"(异步JavaScript和XML),AJAX并非缩写词,而是由Jesse Jam ...

  4. 使用ASP.NET AJAX异步调用Web Service和页面中的类方法(2):处理异步调用中的异常...

    本文来自<ASP.NET AJAX程序设计 第II卷:客户端Microsoft AJAX Library相关>的第三章<异步调用Web Service和页面中的类方法>,请同时 ...

  5. 用JQuery中的Ajax方法获取web service等后台程序中的方法

    用JQuery中的Ajax方法获取web service等后台程序中的方法 1.准备需要被前台html页面调用的web Service,这里我们就用ws来代替了,代码如下: using System; ...

  6. 推荐十四款常见的Web前端开发框架

    在做web开发的时候经常会遇到一个问题,那就是,选择什么样的框架来做前端开发.下面封程中把目前常用的一些前端的框架简单的给大家介绍一下. 1. Bootstrap Boostrap绝对是目前最流行用得 ...

  7. java中使用ajax请求数据格式化,ajax请求服务器返回json数据格式化

    JQuery--实现Ajax应用 实现Ajax应用 1   .load()异步请求数据,通过Ajax请求加载服务器中的数据,并把返回的数据放置到指定的元素中,调用格式为load(url,[data], ...

  8. (c++)web应用开发框架简单对比

    TreeFrog 基本情况 介绍 特性 安装 tufao 基本情况 介绍 它的特点 安装 CppCMS 基本情况 介绍 安装要求 Cinatra 基本情况 介绍 如何使用 TreeFrog 基本情况 ...

  9. Ruby系统中的AJAX开发技术简析

    一. Ajax的简短历史 在短短几个月内,Ajax从一种十分模糊稀罕的技术一下变成最热门的 东西.本文将介绍极其容易使用的Ajax支持-作为Ruby on Rails web应用程序框架的一部分实现. ...

最新文章

  1. 计算机二级考试vb知识点,2016计算机二级《VB》考试重要知识点
  2. PM们,请避免对产品的过度解读!
  3. DSP SCI模块实验
  4. shell字体颜色应用
  5. Linux 环境变量 $PATH
  6. 通过使用CSS字体阴影效果解决hover图片时显示文字看不清的问题
  7. 贪心算法之取手套问题(牛客)
  8. yarn临时目录 没有jar包_复习之yarn
  9. mysql语句中变量 c#_C#基础知识-您的第一个C#程序,类型和变量以及流控制语句...
  10. npm包管理器小节一下
  11. 《R语言编程艺术》——第1章 1.0 快速入门
  12. 《信息存储与管理(第二版):数字信息的存储、管理和保护》—— 2.1 应用...
  13. bootstrap基础样式学习(二)——栅格
  14. 计算机的装机配件,京东买的配件怎么装机自己组装教程
  15. 51单片机小白零基础教程——数码管的静态显示,以及数码管拓展程序(含74HC573锁存器的介绍)
  16. 流程控制之顺数结构和选择结构
  17. Nginx配置SSL支持htpps访问
  18. 【PMP】PMBOK 笔记 第7章 项目成本管理
  19. 3D激光SLAM点云地图pcd转导航可用的2D栅格地图
  20. Javascript frameworks

热门文章

  1. 【HDU 4511】小明系列故事——女友的考验(AC自动机+DP)
  2. Android序列化的存储和读取
  3. Leetcode刷题记录[python]——258 Add Digits
  4. xml入门简介--两天学会xml
  5. 【想象不到的俄罗斯】……太震撼了……
  6. oracle 数据库跨库查询方法
  7. 《NO STRATEGY》《重塑战略》
  8. 【数字信号处理】线性时不变系统 LTI “ 输入 “ 与 “ 输出 “ 之间的关系 ( LTI 系统单位脉冲响应 | 卷积 | 卷积推导过程 )
  9. 【错误记录】Android Studio 编译时 Kotlin 代码编译报错 ( 升级支持库时处理 @NonNull 参数 )
  10. 【商务智能】数据预处理