我在ajax请求之外创建了一个全局变量;var pos = [];
收集来自我的api的特定"作业"的经纬度信息。"Jobs"在ajax请求之外也有它自己的全局变量,用于收集每个作业(var Jobs = [];
)的数据数组。在ajax请求中,我使用了通用的Jobs = data
来为成功时在请求中收集的数据设置变量值(success: function (data) {Jobs = data; ...
)。然后使用Jobs.forEach
循环遍历每个Job。然后在为每个作业创建的标记上使用.getLatLng
传单方法为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);
每次都用新的标记覆盖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