0

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

   });
}

谢谢

4

7 回答 7

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()  ;
于 2012-12-11T16:36:39.507 回答
0
var intervalId = setInterval(function() {
  position();
}, 12e5);
于 2012-12-11T16:36:12.573 回答
0

在您发布的代码中,地理位置功能实际上并不是位置功能的一部分

并且位置永远不会被调用

于 2012-12-11T16:36:48.430 回答
0

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

有关详细信息,请参阅“setInterval”与“setTimeout”

于 2012-12-11T16:36:53.017 回答
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);
于 2012-12-11T16:40:42.097 回答
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();
}
于 2012-12-11T16:44:57.807 回答
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 分钟调用一次定位器

于 2012-12-11T16:58:11.883 回答