2016-08-11 45 views
0

我在ajax請求之外創建了一個全局變量; var pos = [];收集來自我api的特定「工作」的經度和緯度信息。 「作業」也具有它自己的全局變量,用於收集每個作業的數據陣列(var Jobs = [];)。在ajax請求中,我使用通用的Jobs = data來設置成功(success: function (data) {Jobs = data; ...)時請求中收集的數據的變量值。然後我使用Jobs.forEach循環遍歷每個作業。然後通過在爲每個作業創建的標記上使用.getLatLng Leaflet方法爲pos變量賦予一個值。我的問題是,當我嘗試在forEach循環外調用pos變量(我正在使用console.log(pos);進行測試)時,它只會吐出最後一個實例。任何建議,我做錯了什麼?我的簡化代碼如下。注意:我試圖在另一個請求中調用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

相關問題