0

我试图让我的叠加层出现得更慢,而不是同时出现。在我添加 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 被定义为上面的全局。这是当地的。我将其设为全局以尝试调试

4

2 回答 2

4

你需要一个闭包:

  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 闭包

附言。您应该创建一个专用函数来处理循环中的处理:

即: for (...) handleCurrent();

于 2013-06-20T08:39:06.270 回答
-1

那是因为latLng在闭包中不可用。您可以尝试在声明var之前添加:latLng

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);
    }
}
于 2013-06-20T08:31:12.363 回答