有人知道如何从包含getJSON的函数返回值 问题是我试图从其他函数调用该函数以获取值 但它始终未定义!!!! 我怎样才能让它发挥作用??!?
function TranslateLatLanToAddress(LatLng) {
var latlng = "34.1574183,-118.437125";
var url = "http://maps.googleapis.com/maps/api/geocode/json?latlng=" + latlng + "&sensor=false";
$ = jQuery;
$.getJSON(url, function (data) {
for (var i = 0; i < data.results.length; i++) {
var address = data.results[i].formatted_address;
// var address = data.results[i].address_components[4].long_name + data.results[i].address_components[6].short_name;
//alert(address);
// alert(address);
return false;
}
});
}
function GetVal()
{
var retVal =TranslateLatLanToAddress(LatLng);
alert(retVal); //Its undefined!!!
}
答案 0 :(得分:1)
AJAX调用是异步的。这意味着,当请求被发送到服务器(Google地图)时,您的脚本将继续。
这是好事,因为这意味着您的页面会在等待结果时继续加载。
为了您的利益,您可以使用callback
方法。
function TranslateLatLanToAddress(LatLng, fnCallback) {
var latlng = "34.1574183,-118.437125";
var url = "http://maps.googleapis.com/maps/api/geocode/json?latlng=" + latlng + "&sensor=false";
$ = jQuery;
$.getJSON(url, function (data) { // getJSON is asynchronous
for (var i = 0; i < data.results.length; i++) {
var address = data.results[i].formatted_address; // get the result
fnCallback(address); // execute the callback from the parameters
}
});
}
function GetVal() {
TranslateLatLanToAddress(LatLng, function(address){ // note the new callback that takes an address as a parameter
alert(address); // the callback is fired from within the SUCCESS method and now address has a value
});
}
答案 1 :(得分:1)
AJAX是异步的,你正在做的是(伪):
[call TranslateLatLanToAddress]
|
+ ----which triggers an ajax call---[ AJAX response ]
+ ----Get here the AJAX response? |
+--- Now is available!
所以你可以做的是在AJAX get callback中调用一个函数:
$.getJSON(url, function (data) {
// Other code here....
alert( "AJAX DONE" ); // Or like: // myCallbackFunction( data );
});
将所需的AJAX响应数据(如果需要)传递给myCallbackFunction( data );
,无论如何只有在AJAX完成它之后才会调用你的fn myCallbackFunction
。
答案 2 :(得分:0)
$ .getJSON正在使用XMLHTTPRequest,因此它自然是一个异步函数。最好分配回调函数来执行某些操作。
function TranslateLatLanToAddress(LatLng) {
var latlng = "34.1574183,-118.437125";
var url = "http://maps.googleapis.com/maps/api/geocode/json?latlng=" + latlng + "&sensor=false";
$ = jQuery;
$.getJSON( url, execute)
.done(function() {
console.log( "second success" );
})
.fail(function() {
console.log( "error" );
})
.always(function() {
console.log( "complete" );
});
}
function execute(data) {
for (var i = 0; i < data.results.length; i++) {
console.log(data.results[i].formatted_address);
}
}
$ .getJSON还有另一个方便的回调(完成,失败,总是)你可以用一些函数覆盖,比如成功回调。