嗨我有一段javascript代码,我想每两分钟调用一次,但是我似乎无法让它工作,当页面第一次加载它工作正常,但它不会更新后这一点。
请参阅以下代码:
function position(){
var a=setTimeout(position,60000);
}
if(navigator.geolocation)
{
navigator.geolocation.getCurrentPosition(function(position)
{
var lat = position.coords.latitude;
var lon = position.coords.longitude;
var xmlHttp = new XMLHttpRequest(); //not the cross browser way of doing it
xmlHttp.open("GET", "locator/test1.php?lat=" + lat + "&lon=" + lon, true);
xmlHttp.send(null);
});
}
由于
答案 0 :(得分:2)
代码运行一次,因为它不在函数中,但是再也没有运行,因为你永远不会启动超时。我想你想像这样重组:
function position() {
if(navigator.geolocation) {
navigator.geolocation.getCurrentPosition(function(position) {
var lat = position.coords.latitude;
var lon = position.coords.longitude;
var xmlHttp = new XMLHttpRequest(); //not the cross browser way of doing it
xmlHttp.open("GET", "locator/test1.php?lat=" + lat + "&lon=" + lon, true);
xmlHttp.send(null);
});
}
// fire again in 120000ms (2 minutes)
setTimeout(position, 120000);
}
// fire the initial call
position() ;
答案 1 :(得分:0)
var intervalId = setInterval(function() {
position();
}, 12e5);
答案 2 :(得分:0)
在您发布的代码中,地理位置功能实际上并不是位置功能的一部分
并且永远不会调用位置
答案 3 :(得分:0)
setTimeout只会在传递指定时间后运行一次。如果要重复该功能,请使用setInterval。
有关详细信息,请参阅'setInterval' vs 'setTimeout'
答案 4 :(得分:0)
function position(){
if(navigator.geolocation)
{
navigator.geolocation.getCurrentPosition(function(position)
{
var lat = position.coords.latitude;
var lon = position.coords.longitude;
var xmlHttp = new XMLHttpRequest(); //not the cross browser way of doing it
xmlHttp.open("GET", "locator/test1.php?lat=" + lat + "&lon=" + lon, true);
xmlHttp.send(null);
}
var a=setInterval(position,120000);
答案 5 :(得分:0)
您可以尝试使用setInterval https://developer.mozilla.org/en-US/docs/DOM/window.setInterval
但如果您更喜欢使用setTimeout,则需要递归调用函数。
if(navigator.geolocation){
function doSomethingWithPosition(){
navigator.geolocation.getCurrentPosition(function(position){
var lat = position.coords.latitude;
var lon = position.coords.longitude;
var xmlHttp = new XMLHttpRequest(); //not the cross browser way of doing it
xmlHttp.open("GET", "locator/test1.php?lat=" + lat + "&lon=" + lon, true);
xmlHttp.send(null);
});
//RECURSIVE CALL
setTimeout(doSomethingWithPosition, 60000);
}
//FIRST CALL
doSomethingWithPosition();
}
答案 6 :(得分:0)
我也有一个建议。
我认为你想这样做 - 我使用jQuery是因为更好的Ajax回调功能
if(navigator.geolocation) {
getLoc();
}
function getLoc() {
navigator.geolocation.getCurrentPosition(function(position) {
var lat = position.coords.latitude;
var lon = position.coords.longitude;
$.get("locator/test1.php?lat=" + lat + "&lon=" + lon,
function(data){
// do something with data returned
setTimeout(getLoc,120000); // call again in 2 minutes
}
);
});
}
假设第一次成功调用
,它将每隔2分钟调用一次定位器