我有一个函数 LoadXML() 在其中对服务器进行 ajax 调用后,我得到了一个包含 100 个地址类型字符串的数组;
同样在这里我们调用函数extractAddressed(),函数addmarkers
作为回调;
function loadXMLDoc(l)
{
//making ajax call to the server to get the addresses
arrayMyAddresses.push(rec[i][8] + "," + rec[i][10]);
extractAddresses(addmarkerss);
}
这是extractAddresses
发送我想使用getLocations
对谷歌服务器执行异步调用的方法进行 地理编码的部分地址的函数
function extractAddresses(callback)
{ alert (startman);
i=startman;
while (i<startman+intPageSize)
{
geocoder = new GClientGeocoder();
//alert(arrayMyAddresses[i]);
geocoder.getLocations(arrayMyAddresses[i], addAddressToMap);
i++;
}
//callback();
setTimeout(callback,300);
}
在这里,您还可以看到addAddresstoMap
处理来自 google 服务器的响应并创建 gmarkers 数组的函数!
function addAddressToMap(response)
{
if (!response || response.Status.code != 200)
{
alert("Sorry, we were unable to geocode that address");
}
else
{
place = response.Placemark[0];
point = new GLatLng(place.Point.coordinates[1], place.Point.coordinates[0]);
var marker = new GMarker(point);
batch.push(marker);
//alert ("batchaddaddresstomap " + batch.length);
}
}
最后addmarkerss
() 函数将 Gmarkers 数组添加到地图中;
function addmarkerss()
{
// alert("batchf: " + batch.length);
mgr = new MarkerManager(map);
mgr.addMarkers(batch,13);
mgr.refresh();
}
所以这就是我调用程序时程序的工作方式,我extractAddresses
一个一个地给出地理编码的地址,addAddresstoMap
它们被动态添加到 Gmarker 类型的数组中;当我准备好这个时,我调用 addmarkers() 将标记放在我的地图上;
但它实际上是什么
当我extractaddresses
以某种方式调用它时,它首先addmarkers
运行它看到banch
数组是空的并且它没有加载任何标记;当我提出setTimeout(callback,300);
并推迟执行addmarkers
所有工作时。
可能是什么原因。而且我还想问一下问题是否在这里:虽然如果回调函数放在函数的最后,它确实会最后执行,但这并不总是会发生。例如,如果函数包含某种异步执行(*像我的情况下的 Ajax 调用),那么回调将在异步操作开始之后执行,但可能在它完成之前执行。是我的情况吗?settimeout
还有我怎么能在没有*的情况下解决我的问题