Javascript异步/等待ajax调用
Javascript async/await ajax call
我正在使用ajax和谷歌地图。我想用异步调用在地图上创建(并在之后刷新)标记。。这是我的代码:
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#?我是JS 的新手
您的回调函数(在.done
内部)仅在for
循环完成后被调用,并且始终被调用,因为它是异步的。
由于您需要回调中的索引值,因此需要将ajax调用封装在立即执行的函数中,并将索引传递给它。类似于:
for (var i=0;i<length;i++){
(function(i){
//make all your async calls using `i`
})(i);
}
相关文章:
- 另一个ajax调用中的Jquery ajax调用在for循环中没有按预期工作
- Javascript/jQuery中的并行Ajax调用
- 任何方式使AJAX调用Gmail API,而无需通过JS库
- node.js请求数据事件未在CORS ajax调用中触发
- 如何从ajax调用返回.wrap()元素
- Ajax调用在Firefox中不会自动响应
- AJAX调用中的非法调用
- 使用AJAX调用将GeoJSON数据拉入传单
- 在MVC 4中,对Controller的Ajax调用为空
- Jquery:对返回JSON数据的php脚本的Ajax调用
- 在ajax调用中阻止来自JS对象的函数
- 如何在MVC5中ajax调用的部分视图中引用外部javascript
- 页面加载后的Ajax调用
- 如何使用Ajax调用特定的控制器和操作来重定向用户
- curl和fileget_contents在ajax调用后不起作用
- 在任何AJAX调用之前触发一个javascript函数
- 无法在mvc视图中使用ajax调用获取操作返回的模型对象列表
- Ajax调用ERror Cross Origin REquest:在rails中自动完成大学列表
- ASP.NET MVC 3-在ajax调用后,重定向到新页面或生成页面刷新
- 点击功能没有'ajax调用动态元素(Backbone)后无法工作