Jquery 函数中的ajax异步数组
我明白它为什么不起作用。但不知道如何得到结果: 有一个全局数组:Jquery 函数中的ajax异步数组,jquery,ajax,Jquery,Ajax,我明白它为什么不起作用。但不知道如何得到结果: 有一个全局数组: var members=[[1,x,y,z],[2,x1,y1,z1],[3,x2,y2,z3]]; function drop() { for (var i = 0; i < members.length-1; i++) { setTimeout(function() { addMarker(); }, i * 30); } } function addMarker() {
var members=[[1,x,y,z],[2,x1,y1,z1],[3,x2,y2,z3]];
function drop() {
for (var i = 0; i < members.length-1; i++) {
setTimeout(function() {
addMarker();
}, i * 30);
}
}
function addMarker() {
var marker = new google.maps.Marker({
position: members[iterator][1],
icon: pinImage[members[iterator][2]],
shadow: shadow,
map: map,
draggable: false,
title: members[iterator][3],
animation: google.maps.Animation.DROP });
google.maps.event.addListener(marker, 'click', function() {
$.ajax({
url : 'ajax/get_infowindow_content.php?id='+members[iterator][0],
success: function(data) {
infowindow.close();
infowindow.setContent(data);
infowindow.open(map, marker);
}
});
});
markers.push(marker);
iterator++;
}
当我单击标记时,它将启动函数并检查成员[iterator][0],但iterator是iterator的最后一个值(在整个循环之后)
最好的解决方案是某种.value(),如:
但这当然行不通
我累坏了。您只需要一个闭包,并将一个参数传递给addMarker函数:
var members = [[1, x, y, z], [2, x1, y1, z1], [3, x2, y2, z3]];
function drop() {
for (var i = 0; i < members.length; i++) {
(function(j) {
setTimeout(function() {
addMarker(members[j]); //pass the value
}, i * 30);
})(i); //closure to keep the value
}
}
function addMarker(member) {
var marker = new google.maps.Marker({
position: member[1],
icon: pinImage[member[2]],
shadow: shadow,
map: map,
draggable: false,
title: member[3],
animation: google.maps.Animation.DROP
});
google.maps.event.addListener(marker, 'click', function() {
$.ajax({
url: 'ajax/get_infowindow_content.php?id=' + member[0],
success: function(data) {
infowindow.close();
infowindow.setContent(data);
infowindow.open(map, marker);
}
});
});
markers.push(marker);
}
var成员=[[1,x,y,z],[2,x1,y1,z1],[3,x2,y2,z3];
函数drop(){
对于(var i=0;i
尝试将i
作为addMarker()
然后在循环中:
setTimeout(function() {
addMarker(i);
}, i * 30);
你为什么不把
members[i]
作为参数传递给addMarker()
函数呢?你的意思是:函数drop(){for(var i=0;isetTimeout
,假设服务器每次最多30毫秒应答:一次获取所有集合而不是调用N次不是更好吗?这是为了“动画”如果不删除sameNo的所有标记,它将无法工作-因为这是异步函数,并且我等于Loop的最后一个值,需要在setTimeout
之前将值存储在一个变量中,并传递该变量,然后在那里看不到更新的注释,但是是的,它应该可以正常工作。我甚至做了一个测试,以确保它保留值。
var members = [[1, x, y, z], [2, x1, y1, z1], [3, x2, y2, z3]];
function drop() {
for (var i = 0; i < members.length; i++) {
(function(j) {
setTimeout(function() {
addMarker(members[j]); //pass the value
}, i * 30);
})(i); //closure to keep the value
}
}
function addMarker(member) {
var marker = new google.maps.Marker({
position: member[1],
icon: pinImage[member[2]],
shadow: shadow,
map: map,
draggable: false,
title: member[3],
animation: google.maps.Animation.DROP
});
google.maps.event.addListener(marker, 'click', function() {
$.ajax({
url: 'ajax/get_infowindow_content.php?id=' + member[0],
success: function(data) {
infowindow.close();
infowindow.setContent(data);
infowindow.open(map, marker);
}
});
});
markers.push(marker);
}
function addMarker(i){/* code*/}
setTimeout(function() {
addMarker(i);
}, i * 30);