javascript - 使用JSON每隔1秒更新一次传单标记位置

标签 javascript leaflet

我的 map 上有一个标记,代表国际空间站的当前位置(从http://open-notify-api.herokuapp.com/iss-now.json?callback=中拉出)。我还试图使它每1秒移动一次,以跟随该站的轨道移动。

这是我现在拥有的代码:

$.getJSON('http://open-notify-api.herokuapp.com/iss-now.json?callback=?', function(data) {                 
               var latitude = data["data"]["iss_position"]["latitude"];
               var longitude = data["data"]["iss_position"]["longitude"];
               var iss = L.marker([latitude,longitude]).bindPopup("I am the ISS").addTo(map);
               $(function() {
                 setInterval(function() {
                    iss.setLatLng([latitude,longitude]).update();
                 },1000);
               });
              });

这是jsFiddle中的所有内容:http://jsfiddle.net/zmkqu/

它似乎在加载时将标记放置在正确的位置,但是并没有每秒更新一次。关于我在做什么的任何提示?

谢谢!

最佳答案

您应该将整个Ajax调用放入setInterval回调中。现在,由于data不变,因此您将标记设置为第二个相同位置。您必须每秒打一个新电话:

var iss;

function update_position() {
    $.getJSON('http://open-notify-api.herokuapp.com/iss-now.json?callback=?', function(data) {
        var latitude = data["iss_position"]["latitude"];
        var longitude = data["iss_position"]["longitude"];
        if (!iss) {
            iss = L.marker([latitude,longitude]).bindPopup("I am the ISS").addTo(map);
        }
        iss.setLatLng([latitude,longitude]).update();
        setTimeout(update_position, 1000);
    });
}

update_position();

DEMO

注意:最好将setTimeout与Ajax调用一起使用,因为您不知道获得响应需要多长时间。

关于javascript - 使用JSON每隔1秒更新一次传单标记位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14466900/

相关文章:

javascript - 优雅的 javascript - 当发生 3 个不同的 AJAX 请求时触发函数

javascript - parseInt(8558968890839370929) 返回 8558968890839371000 ,为什么?

javascript - 将位置插入集合后重新绘制标记和簇

javascript - 无法渲染 Leaflettilelayer

javascript - 数组返回 0 的长度,尽管它有值

javascript - 帮助找出功能异常的原因

javascript - 如何通过弹出窗口获取在geoserver中发布的wms图层的属性信息。传单

javascript - 传单:使用鼠标悬停和不透明度会产生冲突

leaflet - 使用多个标记集群组显示重叠集群

javascript - 让属性变得懒惰