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

Posted

技术标签:

【中文标题】从 jQuery.post AJAX 调用返回数据?【英文标题】:Return data from jQuery.post AJAX call? 【发布时间】:2012-04-11 22:57:59 【问题描述】:

嗨,我正在调用这个函数:

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());输出[],但第二次正确输出数组。有什么想法吗?

提前致谢

【问题讨论】:

***.com/questions/388436/jquery-ajax-return-value , ***.com/questions/2195161/… How does one return data to the original caller function in javascript?的可能重复 【参考方案1】:

此函数异步工作。 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);
      )
    );
);

【讨论】:

Jajaja,我怀疑。感谢您的确认!【参考方案2】:

如果你需要一个完整的函数,你不能使用$.post函数;

您需要直接调用$.ajax 函数。 您传递一个选项对象,该对象可以具有“成功”、“错误”和“完成”回调。

而不是这个:

$.post(<?=$this->baseUrl('user/parse-kml')?>, parameters, function);

你会用这个:

$.ajax(
    url: <?=$this->baseUrl('user/parse-kml')?>,
    type: "POST",
    data: parameters,
    success: successFunction,
    error: errorFunction,
    complete: completefunction

);

还有很多其他选项可用。 The documentation 列出了所有可用的选项。

【讨论】:

谢谢,这种方法更适合我的需要

以上是关于从 jQuery.post AJAX 调用返回数据?的主要内容,如果未能解决你的问题,请参考以下文章

jquery post 怎么接受后台的多个参数

jQuery post ajax函数[重复]

从 ASP.NET MVC 返回 null 时,jQuery post JSON 失败

ajax/jquery POST 请求的不必要重复

怎么样将jquery $.post返回的数据return?

未设置 Ajax jQuery POST 变量