所以,我一直在努力的jQuery推迟,但在一个循环中检索数据时,我有麻烦。 递延部分似乎只处理来自最终迭代的数据。 如果只有一个数组中的项目,它也将失败,所以我不知道是怎么回事。
我有不同的城市的名字,我想获得中心坐标为每个城市从谷歌地图的地理编码反向
这里是我的函数,得到的中心坐标:
function getGroupLatLng(groupname){
var deferred = new $.Deferred();
geocoder.geocode( { 'address': groupname}, function(results, status) {
if (status == google.maps.GeocoderStatus.OK) {
deferred.resolve(results);
alert(results[0].geometry.location.lat());
} else {
}
});
return deferred.promise();
}
这是该函数被调用,一旦返回结果一个div追加:
var newGroupsLength = newGroups.length;
for (i = 0; i < newGroupsLength; i++) {
newGroups[i]['counter']=counter;
var locationName = newGroups[i]['name'];
counter++;
alert(locationName);
$.when(getGroupLatLng(locationName)).then(function(results){
alert("lat = "+results[0].geometry.location.lat());
var lat=results[0].geometry.location.lat();
var lng=results[0].geometry.location.lng();
console.log(newGroups[i]); //this is running the proper number of times, but it logs the results from the final looped item, 'n' number of times.
newGroups[i]['lat']=lat;
newGroups[i]['lng']=lng;
var jsonArray=[];
jsonArray = newGroups[i];
var template = $('#groupsTemplate').html();
var html = Mustache.to_html(template, jsonArray);
$('#groups-container').append(html);
});
}
我遇到的问题是,递延循环似乎处理的最后一个项目的for循环“n”的次数,以“N”是newGroupsLength数组中的项目数。 当然,应该一次处理每个项目。 如果推迟行动被删除,这一切工作正常。
真诚感谢您的帮助。 这是极大的赞赏