2016-08-11 1 views
0

Я создал глобальную переменную вне запроса ajax; var pos = []; для сбора информации о широте и долготе определенных «заданий», исходящих из моего api. «Задания» также имеет собственную глобальную переменную вне запроса ajax для сбора массива данных для каждого задания (var Jobs = [];). Внутри запроса ajax я использовал общий Jobs = data, чтобы установить значение переменной для данных, собранных в запросе при успешном завершении (success: function (data) {Jobs = data; ...). Затем я использую цикл Jobs.forEach для повторения каждого задания. Затем переменной pos присваивается значение с использованием метода Leaflet на маркере, созданном для каждого задания. Моя проблема заключается в том, что когда я пытаюсь вызвать переменную pos (я тестирую с использованием console.log(pos);) вне цикла forEach, она возвращает только последний экземпляр. Любые предложения о том, что я делаю неправильно? Мой упрощенный код приведен ниже. Примечание. Я пытаюсь вызвать pos внутри другого запроса, но он отлично работает для глобальной переменной Jobs.Глобальная переменная возвращает значение только из последнего экземпляра в цикле

var grid = L.geoJson(); 
var Jobs = {}; 
var pos = []; 

//var control = L.control.layers(grid).addTo(map); 
// This is the ajax request for the jobs data 
$.ajax({ 
    type: 'GET', 
    url: url, 
    timeout: 8000, 
    crossDomain: true, 
    dataType: 'json', 
    data: Jobs, 
    ... 

    //Renders data to view 
    success: function (data) { 
    Jobs = data; 
    Jobs.forEach(function (value) { 
     console.log (pos); 
     ... 
     var latitude = value.latitude; 
     var longitude = value.longitude; 
     ... 

     var marker = L.marker([value.latitude, value.longitude]).addTo(map); 
     pos = marker.getLatLng(); 
     ... 
     console.log (pos); 
    }); 

    // Fetch the file data making the grid  
    $.getJSON('./grid.geojson', function (data) { 
     // Assign the results to the geojsonData variable 

     console.log(Jobs); 
     console.log(pos); 

ответ

4

Вы перезапись pos переменных каждый раз с новым маркером. pos = marker.getLatLng();

Вместо этого вам нужно .push новых значений в массив, это добавит каждое новое значение, чтобы массив

pos.push(marker.getLatLng()); //['marker1'] 

Тогда в следующий раз, когда проходит цикл, следующий маркер будет добавлен

pos.push(marker.getLatLng()); //['marker1', 'marker2'] 

https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Array/push

+0

Это работало отлично, спасибо! Затем я могу использовать его в 'grid.getBounds(). Contains (pos)', чтобы узнать, находятся ли точки в сетке. Я создал другую открытую переменную с массивом для хранения результатов. Теперь мне просто нужно выяснить, что делать с этой информацией! – jcbridwe

+0

Отлично, рад, что это помогло! :) – iamalismith

 Смежные вопросы

  • Нет связанных вопросов^_^