,我将其设置为全局
我想让我的叠加显示得更慢,而不是同时显示。代码工作完美,直到我添加setTimeout。当我尝试运行它时,控制台说没有定义latLng。
经过搜索,我看到很多人都有类似的问题,但似乎没有一个人回答我的问题。
这是函数。如果你需要更多的代码,请告诉我。
function getAndDrop() {
$.ajax({
url : 'php/locationarray.php',
success : function(data) {
latLng = data.split(" ");
for ( i = 0; i < latLng.length; i++) {
setTimeout(function(){
var loc = latLng[i].split("|");
if (marker.length > maxOverlays)
clearSingleOverlay();
addMarker(loc[0], loc[1]);
}, i*200);
}
}
});
}
编辑:latLng在上面被定义为全局变量。它是本地的。为了调试
你需要一个闭包:
success : function(data) {
var latLng = data.split(" ");
for ( i = 0; i < latLng.length; i++) {
(function(LL){
setTimeout(function(){
var loc = LL.split("|");
if (marker.length > maxOverlays)
clearSingleOverlay();
addMarker(loc[0], loc[1]);
}, i*200);
})(latLng[i]);
}
}
请解释一下JavaScript闭包在循环中的用法
p。您应该创建一个专门的函数来处理循环中的处理:
这是因为latLng
在闭包中不可用。您可以尝试在latLng
声明之前添加var
吗?
success : function(data) {
var latLng = data.split(" ");
for ( i = 0; i < latLng.length; i++) {
setTimeout(function(){
var loc = latLng[i].split("|");
if (marker.length > maxOverlays)
clearSingleOverlay();
addMarker(loc[0], loc[1]);
}, i*200);
}
}