从 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 调用返回数据?的主要内容,如果未能解决你的问题,请参考以下文章