Arcgis Server JS 开发,一个奇怪的问题(dojo未定义、机器名不能访问)

来源:互联网 发布:日本玫瑰香体糖 知乎 编辑:程序博客网 时间:2024/06/06 11:05

最近在做ArcGIS Server JS 的开发。JS API布署在本机上,并通过机器名进行访问。访问的相关代码如下。

    1. <script type="text/javascript" src="http://MyServer/arcgis_js_api/library/2.1/arcgis/?v=2.1"></script>
    2. <script type="text/javascript">
            dojo.require("esri.map");
            dojo.require("esri.toolbars.edit");
            dojo.require("esri.layers.FeatureLayer");
            dojo.require("dijit.form.CheckBox");
            var map;
    3. </script>

其中MyServer 是本机的机器名,周五下班时,程序跑起来还是正常的,周一来上班时,出现 “dojo未定义”的错误!!

通过在浏览器器中输入URL地址:http://MyServer/arcgis_js_api/library/2.1/arcgis/?v=2.1 可以访问到API资源。奇怪,为什么程序出错了呢??

搞古了半天,心想重装系吧,唉,就这样一个莫名奇妙的错误重装系统,代价太大了,而且原因没找到,说不定以后哪天又会遇到。总得有一个解决方案吧。用排除法吧,根据提的错误,很两种可能: 一是:有可能JS API根本就没有加载。二是:程序有错误。于是采取下面的方式来排除:

从ArcGIS 网站下,拷贝一个DEMO程序,到VS2005中,运行,可以正确访问到地图。然后将API的引用地址,改成本机的,运行,一样的错误。这说明程序本身应该没有问题,问题出在本机上的API不能被访问到。

然后想到,在另一台机器上布署API,并通过本机访问。对,这是一个好办法,结果在另一台机器布置好API,在本机上去访问,先通本机的浏览器去访问一下吧,输入http://对方的机器名/…………结果,不能访问!!!于是, ping 对方机器名,也没有ping通,哦,问题找到了:本机不能通过机器名访问其它机器!!!!

然后,前面访问本机的JS API时,是通过本机机器名访问的,而通过 ping 本机机器名是可以ping 通的,通过浏览器器访问本机机器名也是可以访问的,为什么程序运行时就不能通过本机的机器名访问呢??????

问题现在变成了:通过机器名不能访问其它机器的资源!!!

于是上百度去查,通过机器名不能访问其它机器是怎么回事,查了半天,未果,最后有人提醒是不是你的子网掩码有问题???哦,查一下吧:

image255.255.0.0 ????(本机掩码)

再一看同一个局域网其他人的:

image 他们的是255.255.255.0 !!!!

于是把本机的掩码改成: 255.255.255.0,一系列问题都解决了!!!!!

总结:当本机的子网掩码更改后,本机还可以通过网关上网,还能够通过IP访问其他机器,还能够通过机器名访问自已的机器。

         但是在 arcgis api 调用过程序,通过机器名访本机上的API时,出现问题。估计是通过“<script type="text/javascript" src="http://MyServer/arcgis_js_api/library/2.1/arcgis/?v=2.1"></script>”访问本机时,是通过了路由器再来访问本机的API,结果由于 子网掩码错误,结果找不到资源。所以要注意了“通过代去访问某台机器上的资源”和“通过浏览器去访问某台机器上的资源”多少还是有一点区别的。而恰恰是这一样区别会导致和掩盖一系统莫名其妙的错误。

        设想一下,如果子网掩码设置有误,又把本机网上拔掉,应该程序运行为正常,因为这时的访问不用经过路由器,就可以通过机器名访问到相关资源了。

       一个小小的失误,浪费了我半天的时间去查找,写下这篇博文以示记念.