JavaScript:异步案例

瓦西亚·普金(Vasia Pupkin)

我有以下代码:

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);

但是我得到一个空数组。如何返回填充数组?我需要从call返回结果IPMapper.addIPArray我尝试对进行回调IPMapper.addIPMarker,但这不是我所需要的(我只需要调用一个函数并得到结果(在RoR中进行下一次缓存的情况)。请对此发表任何评论。

浮士德

一个(不好的)选择是使用,$.ajax而不是$.getJSON,您可以在其中设置async=false,但async=false已弃用,因此强烈建议您不要这样做。

更好的选择是使用来在回调函数中分配值.done()然后,不必IPMapper.markerArray从中返回,而是addIPArray可以将其公开为IPMapper对象的属性,并在以后获取它。然后考虑引发一个事件,表明ajax调用完成时该事件已经准备就绪,并在该事件的处理程序中可以访问IPMapper.markerArray您需要做的事情。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章