需求如下,在点击按钮时,根据相关按钮ajax 取得对应的 地图地址,大概想搞成的类似于这样的效果。
function initMap()
{
$.post("/myMap/GetMapUrl",
{ Param:txtName},
function (data, status) {
data = JSON.parse(data);
var view;
var map;
require([
"esri/Map",
"esri/views/MapView",
"esri/layers/MapImageLayer",
"esri/widgets/LayerList",
"esri/widgets/Search",
"dojo/domReady!"
], function (Map, MapView, MapImageLayer, LayerList, Search) {
map = new Map("mapDiv");
var layer = new MapImageLayer({
url: Data //根据ajax 取得的地址
})
map.add(layer);
view = new MapView({
container: "mapDiv", // Reference to the DOM node that will contain the view
map: map // References the map object created in step 3
});
});
}
}
然后其他地方 的Btn 点击的时候调用,但现在存在 如果这么搞 会死循环导致网页崩溃卡死,如果
require(["esri/layers/MapImageLayer"]);
require(["esri/layers/LayerList"]);
require(["esri/Map"]);
require(["esri/views/MapView"]); 这样申请全局变量 在其他 function 中 还是找不到 map.addLayer(layer2); 的方法 提示 未定义等
反复看了下确实没弄清你说得,如果页面卡死,问题肯定存在于你的请求触发方式,具体问题直接用语言阐述。
建议先实例化地图,若不需要显示则初始化后隐藏,然后在ajax返回请求后,再实例化图层,然后加入到地图中。
并且未保证切片地图服务和动态地图服务都可以正常使用,建议在实例化地图时,加载一个切片地图作为底图,如不想显示可以隐藏。
具体代码可以按照如下方式实现:
//地图初始化
require("esri.Map");
require("esri.layers.ArcGISTiledMapServiceLayer");
var map = new esri.map("mapdiv",{
basemap:new esri.layers.ArcGISTiledMapServiceLayer("url")
});
var MapImageLayerUrl = "";
//ajax获取MapImageLayer的URL地址
//按钮触发时显示地图,并实例化MapImageLayer并添加到地图中
建议设置全局对象app={},在require的function里,设置一个可以外部调用的方法app.method,这个方法内部写ajax。
形如
var app={};
require([],function(){
new Map....
app.Method=function(){
$.post(,,function(){
new Layer....
map.add....
})
}
})