我的 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/