本文只描述現象與處理措施,不討論原理。
開發過程中遇到此異常,查詢后網上說是跨域訪問的問題,給出的解決方案是通過JQuery的跨域訪問機制來解決,
難道我需要直接找ArcGISTiledMapServiceLayer相關代碼,去重構嗎?
還有給出的解決方案如下,http://resources.arcgis.com/en/help/rest/apiref/config.html,大意就是要設置一下ArcGIS Server服務,可服務是別人的,設置不了。
代碼如下,在地圖類型切換時需要調用另一個網址,就報出了如下錯誤。
if (tp == "mp") { //移除之前 map.removeLayer(basemap); //地圖 basemap = new ArcGISTiledMapServiceLayer("http://xxx.xxx.xxx.xxx.xxx.xxx"); $("#mptype").val("mp"); map.addLayer(basemap); }
實際上兩個圖層域名是差不多的,不知道為什么出現這個問題。
后來嘗試了下,在地圖初始化的時候就實例化兩個ArcGISTiledMapServiceLayer,在地圖切換的時候進行圖層的添加、刪除,不進行實例化,即解決問題。
大致代碼如下:
function loadMap(lnt,lat,zo0o) { zoom=zo0o; require(["esri/map", "esri/toolbars/navigation", "esri/layers/ArcGISTiledMapServiceLayer"], function (Map, Navigation, ArcGISTiledMapServiceLayer) { options = { logo: false, fadeOnZoom: true, slider: true, sliderPosition: "bottom-left", sliderStyle: "large" }; iniLat = lat; iniLnt = lnt; map = new esri.Map("mapDiv", options); basemap = new ArcGISTiledMapServiceLayer("http://xxx.xxx.xxx.xxx"); annolayer = new ArcGISTiledMapServiceLayer("http://bb.bbb.ccc.ddd"); map.addLayer(annolayer); spatialReference = map.spatialReference; map.on("mouse-down", function (evt) { console.log(evt.mapPoint.x.toFixed(3) + "," + evt.mapPoint.y.toFixed(3)); }); map.centerAndZoom(new esri.geometry.Point(lnt, lat), zoom); navToolbar = new Navigation(map); }); }
地圖切換代碼修改如下:
function MapTypeSwitch(tp){ require(["esri/map", "esri/layers/ArcGISTiledMapServiceLayer", "esri/config"], function (Map, ArcGISTiledMapServiceLayer, esriConfig) { esriConfig.defaults.io.corsDetection = false; if (tp == "mp") { //移除之前 $("#mptype").val("mp"); map.removeLayer(annolayer); map.addLayer(basemap); } }); }