setTimeout不起作用.控制台说没有定义latLng

Jos*_*osh 0 javascript google-maps-api-3

我试图让我的叠加层显示得更慢,而不是同时显示所有叠加层.代码完美无缺,直到我添加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);
            }
        }
    });
}
Run Code Online (Sandbox Code Playgroud)

编辑:latLng定义为全局上面.这是当地的.我试图调试它是全局的

dav*_*ode 5

你需要一个闭包:

  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]);

    }
}
Run Code Online (Sandbox Code Playgroud)

请阅读此处以获得澄清:请解释在循环中使用JavaScript闭包

PS.你应该创建一个专用函数来处理循环中的处理:

ie:for(...)handleCurrent();