HTML问题中的Javascript-延迟和更新

HTML问题中的Javascript-延迟和更新,javascript,html,Javascript,Html,虽然我是一名经验丰富的程序员,但我对使用HTML/Javascript很在行。我已经在下面发布了我的代码。我想做但一直未能做到的是: 延迟执行refreshmap()(例如延迟500毫秒)。我输入了setTimeout函数,但它似乎没有延迟任何东西,即使是大值 获得正确的输出。目前,距离和持续时间在for循环每次迭代后的打印结果中都会更新,但纬度/经度数据永远不会更新(请参阅随附的输出) Html部分: <!DOCTYPE html> <html> <head

虽然我是一名经验丰富的程序员,但我对使用HTML/Javascript很在行。我已经在下面发布了我的代码。我想做但一直未能做到的是:

  • 延迟执行
    refreshmap()
    (例如延迟500毫秒)。我输入了
    setTimeout
    函数,但它似乎没有延迟任何东西,即使是大值
  • 获得正确的输出。目前,
    距离
    持续时间
    在for循环每次迭代后的打印结果中都会更新,但纬度/经度数据永远不会更新(请参阅随附的输出)
Html部分:

<!DOCTYPE html>
<html> 
<head> 
<meta http-equiv="content-type" content="text/html; charset=UTF-8"/> 
<title>Driving Distances and Times dataset creator</title> 
<script type="text/javascript" 
           src="http://maps.google.com/maps/api/js?sensor=false"></script>
</head> 
<body style="font-family: Arial; font-size: 13px; color: red;white-space:pre-wrap;"> 

<form action="#" onsubmit="setRequest(); return false;" style="white-space:normal;">
<p>
Origin:
<input type="text" name="address1" value="Chicago" />
</p>
<p>
Latitude 1:
<input type="number" name="beginLat" value="35" />
Longitude 1:
<input type="number" name="beginLong" value="-80" />
</p>
<p>
Latitude 2:
<input type="number" name="endLat" value="40" />
Longitude 2:
<input type="number" name="endLong" value="-90" />
</p>
<p>
Divisions per side:
<input type="number" name="divisions" value="1" />
<input type="submit" value="Search" />
</p>
</form>
<p id="results"></p>
<div id="map" style="width: 400px; height: 300px;"></div> 
提前感谢您提供的有用提示

在这里陷入困境之后,我尝试了另一种方法,让javascript只查找一个位置,通过python脚本中设置的url参数提供给它。这样,我知道输出将是唯一的,我可以延迟所有我想要的。我在读取更新页面的输出时遇到了这种情况。即使使用ghost.py和
标记,我也无法获取更新的信息。这仍然是一条更好的途径吗?我想遵守TOS,每次都显示地图

setTimeout(refreshmap(),500);
这里直接调用函数,并将调用结果传递给
setTimeout()
。相反,您需要将函数传递给setTimeout。像这样:

setTimeout(refreshmap, 500);
对于不熟悉函数式语言的人来说,这可能有点陌生

您可以查看以获得进一步的澄清

这里直接调用函数,并将调用结果传递给
setTimeout()
。相反,您需要将函数传递给setTimeout。像这样:

setTimeout(refreshmap, 500);
对于不熟悉函数式语言的人来说,这可能有点陌生


您可以查看以获得进一步的说明。

好的,发生的情况是它延迟了呼叫,然后使用最后一组纬度和经度。这是因为您使用的是全局变量,并且变量在实际调用
refreshMap
之前发生了变化

您应该做的是将
设置超时(refreshmap(),500)
行更改为:

setTimeout(function() {
    refreshmap(latitude, longitude);
}, 500);
然后将
refreshmap
函数更改为如下内容:

function refreshmap(latitude, longitude){...}

您可能还需要包括其他变量。

好的,现在的情况是它延迟了调用,然后使用最后一组纬度和经度。这是因为您使用的是全局变量,并且变量在实际调用
refreshMap
之前发生了变化

您应该做的是将
设置超时(refreshmap(),500)
行更改为:

setTimeout(function() {
    refreshmap(latitude, longitude);
}, 500);
然后将
refreshmap
函数更改为如下内容:

function refreshmap(latitude, longitude){...}

您可能还必须包括其他变量。

setTimeout(refreshmap(),500)应该是
setTimeout(refreshmap,500)-您将函数作为参数传递,而不是调用它。@BenjaminGruenbaum有趣。这肯定会延迟第一次迭代,但不会延迟后续迭代。现在,所有的输出都是同质的,甚至在距离/持续时间上都没有变化(好像它只查找单个位置)。
setTimeout(refreshmap(),500)应该是
setTimeout(refreshmap,500)-您将函数作为参数传递,而不是调用它。@BenjaminGruenbaum有趣。这肯定会延迟第一次迭代,但不会延迟后续迭代。现在,所有的输出都是同质的,甚至在距离/持续时间上都没有变化(好像它只查找单个位置)。这肯定会延迟第一次调用(进度!),但不会延迟for-loop中的任何后续调用。请参阅上面的响应。这肯定会延迟第一次调用(进度!),但不会延迟for-loop中的任何后续调用。使用参数而不是全局变量的好处在于——这完全解决了唯一的输出问题!但每一步之间仍然没有延迟。好吧,你想要的是每次跑步之间500毫秒,对吗?然后,您需要
refreshmap
函数在完成更新纬度/经度所需的任何操作后,使用超时来调用自身。问题是,您的所有超时都是连续设置的,设置延迟500毫秒,而不是彼此延迟。这有意义吗?基本上,使用递归会很有帮助。很抱歉:使用参数和
setTimeout(refreshmap(latitude,longitude),500)
修复了输出的唯一性,但没有修复预期的延迟。但是,使用
setTimeout(函数(){refreshmap(纬度、经度);},500)
似乎无法解决这两个问题。因此,如果我将
refreshmap(纬度、经度)
重新制作为递归结构,并将
setTimeout(函数…
作为初始/外部调用和内部调用,它将有顺序的延迟?关于使用参数而不是全局变量的好处-这完全解决了唯一的输出问题!但每一步之间仍然没有延迟。好吧,你想要的是每次跑步之间500毫秒,对吗?然后,您需要
refreshmap
函数在完成更新纬度/经度所需的任何操作后,使用超时来调用自身。问题是,您的所有超时都是连续设置的,设置延迟500毫秒,而不是彼此延迟。这有意义吗?基本上,使用递归会很有帮助。很抱歉:使用参数和
setTimeout(refreshmap(latitude,longitude),500)
修复了输出的唯一性,但没有修复预期的延迟。但是,使用
setTimeout(函数(){refreshmap(纬度、经度);},500)
似乎无法解决这两个问题。因此,如果我将
refreshmap(纬度、经度)
重新制作为递归结构,并将
setTimeout(函数…
作为初始/外部调用和内部调用,它将按顺序延迟?
function refreshmap(latitude, longitude){...}