如何停止等待ajax请求?

时间:2015-10-07 20:43:28

标签: javascript leaflet

我正在尝试在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;
        };

1 个答案:

答案 0 :(得分:1)

如果您使用jQuery获取JSON数据,则应使用$.ajax而不是其他人(如$.getJSON等),并将其存储为值。

var jqXHR = $.ajax({ [...] }, [...]);

然后就中止了:

jqXHR.abort();

编辑:

TileLayer不提供任何ajax请求。 它只是分配一个" src"瓷砖的属性。

除非您想通过例如实现自己的异步(预)加载延伸TileLayer,window.stop()是你唯一的去处。