微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

javascript-从jQuery.post AJAX调用返回数据?

嗨,我正在调用函数

function getCoordenadas()
{
    var coordenadas = new Array();
    $.post(
        '<?=$this->baseUrl('user/parse-kml')?>', 
        { kmlName: "esta_chica.kml"},
        function(jsonCoord) {
            jQuery.each(jsonCoord, function(i, val) {
                var latlng = val.split(',');
                coordenadas.push(new google.maps.LatLng(latlng[0], latlng[1]));
            });
        },
        'json'
    );  
    return coordenadas;
}

像这样:

$(document).ready(function(){
    $('.caller').click(function() {
        console.log(getCoordenadas());
    });
});

因此,当您单击.caller时,它将调用函数获取正确填充数组的数据,但console.log(getCoordenadas());输出[].

如果我将数组声明(var coordenadas = new Array();)从函数作用域移到全局,则当我第一次单击.caller时,会出现该问题.console.log(getCoordenadas());输出[],但是第二次正确输出数组.有任何想法吗?

提前致谢

解决方法:

功能异步工作. AJAX发布被触发,然后函数返回而无需等待AJAX​​调用完成.这就是为什么coordenadas数组为空的原因.

全局设置时,第一次仍然为空,第二次尝试时,ajax返回并填充数组.您应该重组代码以使用回调.像这样:

// deFinition
function getCoordenadas(callback)
{
    var coordenadas = new Array();
    $.post(
        '<?=$this->baseUrl('user/parse-kml')?>', 
        { kmlName: "esta_chica.kml"},
        function(jsonCoord) {
            jQuery.each(jsonCoord, function(i, val) {
                var latlng = val.split(',');
                coordenadas.push(new google.maps.LatLng(latlng[0], latlng[1]));
            });
            callback(coordenadas);
        },
        'json'
    );  
}

// usage
$(document).ready(function(){
    $('.caller').click(function() {
      getCoordenadas(function(coord) {
        console.log(coord);
      })
    });
});

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐