Javascript 异步/等待 ajax 调用

标签 javascript jquery ajax asynchronous

<分区>

我正在使用 ajax 和谷歌地图。我想通过异步调用在我的 map 上创建(并在之后刷新)标记。这就是我的代码:

function createMarker(){
    for (var i in selectedTrucks) {

    var urlReq = '/ajaxRequest/getSingleTruckPosition/' + selectedTrucks[i];
    console.log("Launching createMarker() request on: " + urlReq);

    $.ajax({
        url: urlReq,
    })
    .done(function(data) {

        var equipValue = jQuery.parseJSON(data);

        if(equipValue == null)
            console.log(selectedTrucks[i] + " has no position.");
        else{
            //console.log("Creating marker n° " + i + " on position: lat: " + equipValue.latitudine + " lng: " +  equipValue.longitudine);
            console.log("Creating marker n° " + i + " on position: lat: " + equipValue.LATITUDINE + " lng: " +  equipValue.LONGITUDINE);
            markers[i] = new google.maps.Marker({
                position: new google.maps.LatLng(equipValue.LATITUDINE,  equipValue.LONGITUDINE),
                map: map,
                //icon: iconBase + 'truck.png'
            });


            var infowindow = new google.maps.InfoWindow(); // popup marker 

            makeInfoWindowEvent(map, infowindow, "Marker: " + i, markers[i]);

            markers.push(markers[i]);

        }
    })
    .fail(function() {
        console.log("Ajax failed to fetch data on createmarker")
    })

}

}

基本上一切正常,但是当我启动 makeInfoWindowEvent() 时,标记索引始终是我 for 循环的最后一个。我认为是 ajax 回调的问题。 如何在 ajax 调用期间停止 for 循环?

有像c#这样的await吗?我是 JS 新手

最佳答案

您的回调函数(在 .done 内)只在 for 循环完成后调用,因为它是异步的。

由于您需要回调中的索引值,您需要将 ajax 调用包装在一个立即执行的函数中,并将索引传递给它。像这样的东西:

for (var i=0;i<length;i++){
  (function(i){

    //make all your async calls using `i`

   })(i);
}

关于Javascript 异步/等待 ajax 调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36303435/

相关文章:

jquery - 将 JQuery Zoom 与 Bootstrap Carousel 结合使用

javascript - 如何通过 google docs 插件发送 webhook 请求?

c# - 如何使用ajax发送字典和文件

javascript - 如何使用 JS 将 GMT 日期时间转换为 GMT Unix 时间戳?

javascript - 使用 twitter bootstrap 创建工具提示/弹出框后的回调函数?

php - "VIEW FULL SITE"移动站点选项

javascript - jQuery scrollTop - 哈希值错误的问题

ajax - 在javascript中获取iframe重定向url

javascript - 星级评定 如果单击星级,则如何启用以前的星级也会被单击

javascript - Javascript 中的 For 循环在另一个 for 循环中崩溃