使用SetTimout的Javascript重定向不起作用

时间:2012-07-28 14:59:07

标签: javascript gps scope

似乎无法让这个javascript重定向工作? 建议?

我是否应该通过元刷新来完成它?如何?

// If we have a successful location update
function onGeoSuccess(event)
{
    document.getElementById("Latitude").value =  event.coords.latitude; 
    document.getElementById("Longitude").value = event.coords.longitude;
    document.getElementById("location").href = "track.cfm?track=s&Lat=" + event.coords.latitude + "&Long=" + event.coords.longitude;

var redirectUrl = "track.cfm?track=s&Lat=" + event.coords.latitude + "&Long=" + event.coords.longitude; 

}

// If something has gone wrong with the geolocation request
function onGeoError(event)
{
    alert("Error code " + event.code + ". " + event.message);
}

function redirect() 
     { 
    window.location = redirectUrl; 
     } 
    setTimeout(redirect,15000); 

3 个答案:

答案 0 :(得分:2)

问题是redirectUrl变量的范围。您已将redirectUrl声明为onGeoSuccess函数的本地,因此仅在其内部可见。对于解决方法,您可以放置​​所有这些内容:

function redirect() 
{ 
    window.location = redirectUrl; 
} 
setTimeout(redirect,15000);
通过在onGeoSuccess之前删除redirectUrl,在var函数内部

或使redirectUrl全局变为全局:

     redirectUrl = "track.cfm?track=s&Lat="+...
//^-----no 'var'

答案 1 :(得分:0)

在父作用域中声明redirectUrl,然后运行onGeoSuccess函数。

var redirectUrl;

function onGeoSuccess (event) {
  document.getElementById("Latitude").value =  event.coords.latitude; 
  document.getElementById("Longitude").value = event.coords.longitude;
  document.getElementById("location").href = "track.cfm?track=s&Lat=" + event.coords.latitude + "&Long=" + event.coords.longitude;

  redirectUrl = "track.cfm?track=s&Lat=" + event.coords.latitude + "&Long=" + event.coords.longitude; 

}

function onGeoError (event) {
  alert("Error code " + event.code + ". " + event.message);
}

function redirect () { 
  window.location = redirectUrl; 
} 

onGeoSuccess(...);
setTimeout(redirect, 15000);

答案 2 :(得分:0)

两个问题:

1)重定向网址由一个函数设置,该函数至少从您发布的代码中未被调用

2)即使被调用,redirectUrl也是该函数的局部变量,因此超时无法访问它。

始终检查错误控制台。