Hallo, ich habe ein Stück Javascript-Code, den ich alle zwei Minuten aufrufen möchte, aber ich kann nicht scheinen, dass es funktioniert, wenn die Seite zum ersten Mal geladen wird, funktioniert es gut, aber es wird danach nicht aktualisiert.

Bitte siehe Code unten:

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

   });
}

Vielen Dank

0
Sam Williams 11 Dez. 2012 im 20:32

7 Antworten

Beste Antwort

Der Code wird einmal ausgeführt, weil er nicht in der Funktion enthalten ist, aber nie wieder, weil Sie das Timeout nie starten. Ich denke, Sie möchten so umstrukturieren:

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()  ;
2
Brenton Alker 11 Dez. 2012 im 17:03

SetTimeout führt die Funktion nur einmal aus, nachdem die angegebene Zeit abgelaufen ist. Wenn Sie die Funktion wiederholen möchten, verwenden Sie setInterval.

Weitere Informationen finden Sie unter 'setInterval' vs 'setTimeout'

0
Community 23 Mai 2017 im 12:21

Sie können setInterval ausprobieren, um dies zu tun. de-US / docs / DOM / window.setInterval

Wenn Sie jedoch lieber setTimeout verwenden möchten, müssen Sie Ihre Funktion rekursiv aufrufen.

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();
}
0
Scipion 11 Dez. 2012 im 16:44

Ich habe auch einen Vorschlag.

Ich denke, Sie möchten dies tun - ich verwende jQuery wegen der besseren Ajax-Rückruffunktion

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

Der Locator wird alle 2 Minuten aufgerufen, vorausgesetzt, er wird beim ersten Mal erfolgreich aufgerufen

0
mplungjan 11 Dez. 2012 im 16:58

In dem von Ihnen veröffentlichten Code ist die Geolokalisierungsfunktion nicht Teil der Positionsfunktion

Und Position wird nie genannt

0
Seth 11 Dez. 2012 im 16:36
var intervalId = setInterval(function() {
  position();
}, 12e5);
0
Eru 11 Dez. 2012 im 16:36
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);
0
Ryan 11 Dez. 2012 im 17:05