0

こんにちは私は2分ごとに呼び出したい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

あなたが投稿したコードでは、地理位置情報機能は実際には位置機能の一部ではありません

位置が呼び出されることはありません

于 2012-12-11T16:36:48.430 に答える
0

setTimeout は、指定された時間が経過した後に関数を 1 回だけ実行します。関数を繰り返したい場合は、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
var intervalId = setInterval(function() {
  position();
}, 12e5);
于 2012-12-11T16:36:12.573 に答える
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

私からも提案があります。

私はあなたがこれをやりたいと思っています - 私はより良いAjaxコールバック機能のためにjQueryを使用しています

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 に答える