我正在尝试在LeafletJS地图上发生某个操作时停止等待ajax请求。这正是我正在做的事情,我有一个查询WMS服务的地图(使用LeafletJS),当用户平移,缩放或查询新图层时,先前排队的ajax请求继续等待响应。
我们的想法是只处理为当前地图视图标准提供服务的请求,并取消其他所有操作。我试图实现这一目标的原因是为了提高当前操作的呈现性能和速度,并忽略之前的所有操作。
我觉得这更像是一个Javascript问题,而不是一个leafletJS特定问题,所以我查看了 abort()但我不确定如何将它应用于LeafletJS
编辑: 以下是我目前查询WMS服务的代码(服务是私有的)
$scope.makeWMSLayer = function (layerInfo) {
if (layerInfo == null)
return false;
var uri = apiUrl+"/WMSService/";
var options = {
layers: layerInfo.Name,
maxZoom: layerInfo.maxZoom || 20,
minZoom: layerInfo.minZoom || 11 ,
format: 'image/jpeg',
transparent: true
};
var layer = L.tileLayer.wms(uri, options);
layer.on({
load: function () { self.layersLoading[layerInfo.Name] = false; digest(); },
loading: function () { self.layersLoading[layerInfo.Name] = true; digest(); }
});
/*keep current active layer inside a $rootScope variable*/
$rootScope.activeLayer = layer;
return layer;
};
答案 0 :(得分:1)
如果您使用jQuery获取JSON数据,则应使用$.ajax
而不是其他人(如$.getJSON
等),并将其存储为值。
像
var jqXHR = $.ajax({ [...] }, [...]);
然后就中止了:
jqXHR.abort();
编辑:
TileLayer不提供任何ajax请求。 它只是分配一个" src"瓷砖的属性。
除非您想通过例如实现自己的异步(预)加载延伸TileLayer,window.stop()
是你唯一的去处。