Javascript没有每两分钟更新一次函数

Javascript没有每两分钟更新一次函数,javascript,Javascript,嗨,我有一段javascript代码,我想每两分钟调用一次,但是我似乎无法让它工作,当页面第一次加载时,它工作正常,但之后不会更新 请参阅下面的代码: function position(){ var a=setTimeout(position,60000); } if(navigator.geolocation) { navigator.geolocation.getCurrentPosition(function(position) { var lat = position.c

嗨,我有一段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);

   });
}

谢谢

代码只运行了一次,因为它不在函数中,但不会再次运行,因为您从未开始超时。我想你想这样重组:

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()  ;

在您发布的代码中,地理定位功能实际上不是position函数的一部分


并且从不调用position

setTimeout只会在指定时间过后运行函数一次。如果要重复此功能,请使用setInterval


有关详细信息,请参见。您可以尝试设置间隔

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);
但是如果您喜欢使用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();
}

我还有一个建议

我想您应该这样做——我使用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分钟调用定位器一次,
setTimeout
运行一次,
setInterval
重复运行。第二,60000=1分钟,不是2分钟。你不是在递归地调用“位置”吗?顺便说一下,60000 ms=1分钟,如果需要2分钟,则设置120000您是否将代码从项目中复制出来,因为您所做的一切都是反复调用关闭的函数
position
。。您每60000毫秒调用一次
position
,但
position
除了调用自身之外,不执行任何操作。您可能打算将其余代码也包含在函数中。
//在120000**MILLI**secs后再次激发,否则回答很好。除非您也调用函数外部的位置,否则这将不起作用
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
      }
    ); 
  });
}