2015-10-07 4 views
0

Я пытаюсь остановить ожидающие запросы ajax, когда определенное действие происходит на карте LeafletJS. Вот что я делаю, у меня есть карта (которая использует LeafletJS), которая запрашивает услугу WMS, когда пользователь панорамирует, масштабирует или запрашивает новый уровень, ранее поставленные в очередь запросы ajax продолжают ждать ответа.Как остановить ожидающие запросы ajax?

Идея состоит в обработке только запросов, которые будут служить текущим критериям просмотра карты и отменить все остальное. Причина, по которой я пытаюсь достичь этого, - улучшить производительность и скорость выполнения текущего действия и игнорировать все предыдущие действия.

Я чувствую, что это больше вопрос Javascript, чем конкретный вопрос leafletJS так что я посмотрел в прерыванием() но я не уверен, как применять его с 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; 
     }; 
+2

Можете ли вы опубликовать код, который у вас есть сейчас? – arcyqwerty

+0

Я обновил свой вопрос с помощью функции, которая создает все запросы ajax. При запросе нового слоя происходит от 12 до 15 запросов! – mehany

ответ

0

Если вы используете JQuery для получения данных в формате JSON, вы должны использовать $.ajax вместо других (как $.getJSON и т.д.), и сохраните его в качестве стоимость.

Как

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

затем просто прервать его:

jqXHR.abort(); 

EDIT:

TileLayer не предоставляет каких-либо Ajax-запросы. Это просто назначение атрибута «src» для фрагментов.

Если вы не хотите реализовать свою собственную асинхронную (предварительно) загрузку, например. расширение TileLayer, window.stop() - ваш единственный выход.

+0

OP заявлено: я чувствую, что это скорее вопрос Javascript, чем конкретный вопрос, связанный с листом, поэтому я просмотрел abort(), но я не уверен, как его применять с LeafletJS – Reinard

+0

есть ли способ подачи листовки? LeafletJS отвечает за инициирование всех запросов ajax, и я не уверен, как получить доступ к этому! – mehany

+0

Необходимо выполнить инициализацию геоинформации. В листовок нет объекта inbult ajax. – Victor