Javascript “扔传单”;未捕获类型错误:无法读取属性';纬度';“未定义”的定义;向地图添加新标记时

Javascript “扔传单”;未捕获类型错误:无法读取属性';纬度';“未定义”的定义;向地图添加新标记时,javascript,leaflet,Javascript,Leaflet,我试图循环查看ajax调用的结果,以便在单击时为传感器创建标记。现在,我只想在单击按钮时显示标记。这是行不通的。调试后,可能是计时/并发问题,但之前类似的问题通过window.SetTimeOut()解决了。这对我不起作用。我在下面列出了这段代码和错误消息的截图: latlng对象为空的传单屏幕截图 控制台中错误的屏幕截图 function sensorLayer(response) { response.forEach(function(item) { if (item["Lat

我试图循环查看
ajax
调用的结果,以便在单击时为传感器创建标记。现在,我只想在单击按钮时显示标记。这是行不通的。调试后,可能是计时/并发问题,但之前类似的问题通过
window.SetTimeOut()
解决了。这对我不起作用。我在下面列出了这段代码和错误消息的截图:

latlng对象为空的传单屏幕截图

控制台中错误的屏幕截图

function sensorLayer(response) {
  response.forEach(function(item) {
    if (item["Latitude"] !== null && item["Longitude"] !== null) {
      window.setTimeout(() => {
        var mark = new L.marker((parseFloat(item["Latitude"]), parseFloat(item["Longitude"])))
          .addTo(map);
      }, 100);
    }
  });
}

这是我的代码

function sensorLayer(response) {
  response.forEach(function(item) {
    if (item["Latitude"] !== null && item["Longitude"] !== null) {
      window.setTimeout(() => {
        var mark = new L.marker((parseFloat(item["Latitude"]), parseFloat(item["Longitude"])))
          .addTo(map);
      }, 100);
    }
  });
}
这是电话:

document.getElementById("sensorSwitch").addEventListener("click", function(){  $.ajax({  
url: ' ',//I deleted this
data: {
  db: ' ',
  q: "SELECT MEAN(\"pm2.5 (ug/m^3)\") from airQuality where time >='2017-09-06T00:00:00Z'"
},
success: function (response){
  console.log(response);  });  

感谢您的帮助!它不会让我添加超过2个链接,否则我会包含一个我返回的数据示例(我想过度共享并不重要)。

您可能希望用坐标实例化一个
L.latLng
,或者将它们作为数组传递,而不是用普通括号将2个坐标括起来
(lat,lng)

var-mark=L.marker(
拉丁(
parseFloat(项目[“纬度]),
parseFloat(项目[“经度”])
)
);
或:

var-mark=L.marker([
parseFloat(项目[“纬度]),
parseFloat(项目[“经度”])
]);

顺便说一句,您应该避免使用源自客户机代码的SQL查询。这是一个典型的代码注入安全漏洞。

hmm,我猜您的一个标记没有latlng-如何调用该函数?你能发布你的js文件吗?所以问题是我所有的值都不是空的;如果我做标记时没有空值,标记怎么会有空latlng?这就是为什么我最初认为这是一个并发问题。我添加了调用!我想添加整个文档,但是它有400多行,我尝试了第一个选项,它完全起作用了。真不敢相信我错过了。谢谢顺便说一句,你是对的;我应该避免使用源自客户机代码的SQL查询。