ski*_*ree 5 javascript leaflet
我正在尝试遍历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);
}
});
}
Run Code Online (Sandbox Code Playgroud)
这是电话:
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); });
Run Code Online (Sandbox Code Playgroud)
任何帮助表示赞赏!它不会让我添加超过 2 个链接,否则我会包含一个我返回的数据示例(我认为过度共享并不在乎)。
您可能想用L.latLng您的坐标实例化 ,或将它们作为数组传递,而不是用普通括号包装您的 2 个坐标(lat, lng):
var mark = L.marker(
L.latLng(
parseFloat(item["Latitude"]),
parseFloat(item["Longitude"])
)
);
Run Code Online (Sandbox Code Playgroud)
或者:
var mark = L.marker([
parseFloat(item["Latitude"]),
parseFloat(item["Longitude"])
]);
Run Code Online (Sandbox Code Playgroud)
顺便说一句,您绝对应该避免使用源自客户端代码的 SQL 查询。这是代码注入的典型安全漏洞。