我在 ajax 请求之外创建了一个全局变量; var pos = [];
收集来 self 的 api 的特定“工作”的纬度和经度信息。 “作业”在 ajax 请求之外还有它自己的全局变量,用于收集每个作业的数据数组 ( var Jobs = [];
)。在ajax请求中,我使用了通用Jobs = data
将变量值设置为成功时请求中收集的数据 ( success: function (data) {Jobs = data; ...
)。然后我使用 Jobs.forEach
循环遍历每个作业。 pos
然后使用.getLatLng
给变量赋值为每个作业创建的标记上的传单方法。我的问题是,当我尝试调用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);
最佳答案
您每次都会用新标记覆盖 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
关于javascript - 全局变量仅返回循环中最后一个实例的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38900565/