function getLongLat(address)
{
geocoder = new GClientGeocoder();
if (geocoder) {
geocoder.getLatLng(address,
function(point) {
if (!point) {
return "null";
} else {
return point;
}
}
);
}
}
如果我提醒(点)我得到经度和纬度。
答案 0 :(得分:4)
试试这个:D
function getLongLat(address)
{
geocoder = new GClientGeocoder();
if (geocoder) {
return geocoder.getLatLng(address,
function(point) {
if (!point) {
return "null";
} else {
return point;
}
}
);
}
return false;
}
答案 1 :(得分:3)
这是因为你的函数没有return语句。
作为geocoder.getLatLng
的参数调用的内部函数确实有一个return语句,这让你感到困惑。我建议你提取内部函数来减少令人困惑的方面。
试试这个:
function convert_to_null_if_falsy(value) {
return value || "null";
}
function getLongLat(address) {
geocoder = new GClientGeocoder();
return geocoder.getLatLng(address, convert_to_null_if_falsy);
}
我不确定你为什么要在回调函数中返回字符串"null"
而不是undefined
,但是这段代码的功能相同而且麻烦要少得多。
答案 2 :(得分:1)
如果geocoder
不是 true 怎么办?并且geocoder.getLatLng
也没有返回任何值。
因此,让两者都返回一些东西,或许:
function getLongLat(address) {
geocoder = new GClientGeocoder();
if (geocoder) {
return geocoder.getLatLng(address, function(point) {
if (!point) {
return "null";
} else {
return point;
}
});
}
return "null";
}
答案 3 :(得分:1)
请记住,getLatLng()是异步的:你传入一个匿名函数,让它在完成时执行。
你的getLongLat()函数在这种情况下将无法返回点,因为匿名函数是在一个完全不同的上下文中异步运行的:你的函数将在Google的意愿之前执行并返回,而且甚至不会在外部职能的范围。
你需要在匿名函数中调用你想要操作的任何代码:
function getLongLat(address)
{
geocoder = new GClientGeocoder();
if (geocoder) {
return geocoder.getLatLng(address,
function(point) {
// point is only in scope for this anonymous inner function
// which is called when your request to Google's service completes
if (!point) {
// your error condition if a point isn't found
// omgMissingPoint(point);
} else {
// your function to process points here.
// processPoint(point);
}
}
);
}
}