我有以下代码:
var IPMapper = {
markerArray = [];
addIPArray: function(ipArray) {
.....
for (var i = 0; i < ipArray.length; i++) {
IPMapper.addIPMarker(ipArray[i], i, ipArray.length, IPMapper.f_callback);
}
return IPMapper.markerArray;
},
addIPMarker: function(ip, i, ip_array_length) {
var url = encodeURI(IPMapper.baseUrl + ip + "?callback=?");
$.getJSON(url, function(data) {
var latitude = data.latitude;
var longitude = data.longitude;
var latlng = new google.maps.LatLng(latitude, longitude);
var marker = new google.maps.Marker({
draggable: false,
position: latlng
});
IPMapper.markerArray.push(marker);
}
}
}
我试过:
IPMapper.addIPArray(array_with_ips);
但是我得到一个空数组。我如何返回一个填充数组?我需要调用 IPMapper.addIPArray
的返回结果。我尝试为 IPMapper.addIPMarker
进行回调,但这不是我需要的(我只需要调用一个函数并获得结果(在 RoR 中进行下一次缓存的某些情况))。请对此发表任何评论。
最佳答案
一个(不好的)选项是使用 $.ajax
而不是 $.getJSON
,您可以在其中设置 async=false
,但是async=false
已弃用,因此强烈建议不要使用。
更好的选择是使用 .done()
在回调函数中分配值。然后,不用从 addIPArray
返回 IPMapper.markerArray
,您可以将其公开为您的 IPMapper
对象的属性,并在以后获取它。然后考虑在 ajax 调用完成时引发一个事件,表明它已准备就绪,并在该事件的处理程序中访问 IPMapper.markerArray
以执行您需要执行的操作。
关于JavaScript:异步案例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22723397/