Javascript没有每两分钟更新一次函数
嗨,我有一段javascript代码,我想每两分钟调用一次,但是我似乎无法让它工作,当页面第一次加载时,它工作正常,但之后不会更新 请参阅下面的代码:Javascript没有每两分钟更新一次函数,javascript,Javascript,嗨,我有一段javascript代码,我想每两分钟调用一次,但是我似乎无法让它工作,当页面第一次加载时,它工作正常,但之后不会更新 请参阅下面的代码: function position(){ var a=setTimeout(position,60000); } if(navigator.geolocation) { navigator.geolocation.getCurrentPosition(function(position) { var lat = position.c
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函数的一部分
并且从不调用positionsetTimeout只会在指定时间过后运行函数一次。如果要重复此功能,请使用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
}
);
});
}