从jQuery.post AJAX调用返回数据?
嗨,我正在调用此函数:
function getCoordenadas() { var coordenadas = new Array(); $.post( '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()); 输出[],但第二次正确输出数组。 有任何想法吗?
提前致谢
此函数异步工作。 AJAXpost被触发,然后函数返回而不等待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); }) }); });
如果你需要一个完整的函数,你不能使用$.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 });
还有很多其他选择。 文档列出了所有可用选项。