Javascript每两分钟不更新一次功能

时间:2012-12-11 16:32:53

标签: javascript

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

   });
}

由于

7 个答案:

答案 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分钟调用一次定位器