http://www.gissky.net- GIS空间站

我要投稿 投稿指南 RSS订阅 网站资讯通告:
搜索: 您现在的位置: GIS空间站 >> 技术专栏 >> ArcGIS >> ArcIMS >> 正文

使用AJAX开发ArcIMS

作者:浩淼的天…    文章来源:http://www.hmgis.cn/    点击数:    更新时间:2007-11-7
摘要:ArcIMS的原理在于,我们所做的任何地图操作,都是客户端client向连接器发送一个ArcXML格式请求,Connector接收到请求后,将其解析转发给地图服务器,地图服务器将产生的结果,无论是feature还是image格式的响应,也通过ArcXML格式数据反馈给Connector,连接器再将这个结果作为响应发送给client。

需要指出的是,在标准的返回中,http返回的可以有responseXML和responseText等多种形式,我们一般使用这两种形式。它们的区别在于前者是个XMLDoc对象,而后者是个字符串。但是由于ArcXML响应并不是有效的XML格式数据,在ArcIMS开发中,使用responseXML是无效的,我们必须使用responseText返回ArcXML响应。

好,在接收到响应之后,我们不愿意再用拆字符串的方式解析响应了,我们想用XML技术来实现简介的信息提取,这个时候我们需要新建一个xmldocument对象,其代码如下:

//获得XML DOM对象,用于处理ARCXML返回的信息
function getXMLObject(theResult){
    var xmlDoc;
    if(document.implementation && document.implementation.createDocument) {
        // MOZILLA
         xmlDoc = document.implementation.createDocument("", "", null);
         xmlDoc.async="false";
         xmlDoc.loadXML(theResult);
    } else if (window.ActiveXObject){
        //IE
        xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
        xmlDoc.async="false";
        xmlDoc.loadXML(theResult);
    }
    return xmlDoc;
}

上面的代码一般都没有问题,在获得了xmlDoc对象以后,如果要解析出某个属性,可以使用类似的方式:
var theURL = xmlDoc.getElementsByTagName("OUTPUT").item(0).getAttribute("url");
当然,前提是theResult中有这么个OUTPUT节点,且节点中有url这个属性。

有的时候ArcXML中明明有某个节点,如查询要素信息类型请求的响应,但xmldoc愣是解析不出来,怎么办,查看原因好像也不是很清楚,不过解决这个问题的关键在于ArcXML的请求中将outputmodel设置为newxml即可。

在使用AJAX开发站点的过程中,我发现了几个特别的地方:

1.ArcIMS客户端不用访问服务器上的页面即可启动

在我们普通的ArcIMS开发时候,如果要访问一个站点,一般是使用http://hostname/website/webname才能访问到站点的,这是因为我们在访问web服务器上的页面,必须使用http协议。但使用AJAX开发,无需这么复制,你就算是双击打开页面,站点也照样能够运行。这是因为我们在使用XHR在访问数据服务。

2.网站必须连接上网络

这是个让我迷惑不解的地方。这个网络,可以是局域网,也可以是Internet,但是必须链接上。地图才能正常返回出来,也就是XHR才能够正常访问到连接器Servlet。这么解决这个问题,我还没有寻找到原因,有知道的人麻烦告诉一声。

3.document.body.scrollleft和document.body.scrolltop始终为0

由于是webgis,与页面的交互是肯定的,这个时候我们需要获得鼠标在页面上的坐标,这个坐标为event.clientX和event.clientY。但是如果浏览器不是最大化,而是有滚动条出现,鼠标的实际位置就是client位置加上滚动偏移量。即MouseX = event.clientX+document.body.scrollleft,但是这个值总是为0,最后找到相关资料,应该改为:

MouseX=event.clientX + documdent.documentElement.scrollleft
MouseY=event.clientY+document.documentElement.scrolltop

4.AJAX的安全性

我们在AJAX访问IMS所遇到的安全性问题是源于javascript的“同源策略”,即JS不能访问外域的数据。举一个例子,在开发这个网站的时候,我使用的是本机名作为访问名,如http://zblog/esri.....等,但如果我将这个站点发布,希望外网用户使用IP或域名的方式访问我的站点,如http://130.130.71.1访问,我必须将源代码中的zblog换成IP才行。这是因为从IP端访问的请求是无法向一个非IP指定的服务发送AXL请求的。

5.Javascript的开发工具

JS的开发工具我使用的是Yaldex的1st javascript editor软件,这个软件非常棒,有自动提示和debug功能,使用起来得心应手。大家可以在许多下载站点上下载它的21天试用版,如果需要破解,可以到    http://revenge.crackdb.com/rlz/1st.javascript.editor.pro.3.8.cracked.exe-rev.zip 下载一个破解。

上一页  [1] [2] 

Tags:ArcIMS,AJAX  
责任编辑:gissky
关于我们 - 联系我们 - 广告服务 - 友情链接 - 网站地图 - 中国地图