setTimeout不工作.控制台显示未定义latLng



我想让我的叠加显示得更慢,而不是同时显示。代码工作完美,直到我添加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);
    }
}

最新更新