javascript 回调函数返回值

liang0356 2010-10-28 10:32:20
想传回回调函数里面的一些值,代码如下

function zoomOut()
{
debugger;
latlng = map.fromContainerPixelToLatLng(clickedPixel);
mygeocode.getLocations (latlng,function(response) {
document.getElementById("toaddress").value = response.Placemark[0].address;
temp = response.Placemark[0].address; //temp是全局变量
}
);
anotherFunction(temp);

调试的时候,函数里面的temp的确有值了,但下面的temp却是 undefined。请问各位是怎么回事?还有如果我单步的能够进到上面回调函数的内部,却出不来了,没能单步到 anotherFunction这里,但是直接可以运行到 anotherFunction。
...全文
968 11 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
Mr-Jee 2010-10-29
  • 打赏
  • 举报
回复
我也不知道了
既然解决了就OK了,等得空了,我去看看什么个情况
hch126163 2010-10-29
  • 打赏
  • 举报
回复
你先后顺序错了撒!你要用temp这个值,肯定要等服务器响应回来后,再使用撒!
liang0356 2010-10-29
  • 打赏
  • 举报
回复
虽然还不知道原因,但是把与temp相关的操作放到 getLocations里面去,问题解决了。请问一下上楼,怎样设置 async 属性?因为是 google 提供的 api,直接建立对象(mygeocode)后,直接调用getLocations就可以了,背后的ajax请求等不用干预。
liang0356 2010-10-28
  • 打赏
  • 举报
回复
难道因为 ajax的异步性? 这个getlocations其实就是通过 ajax完成的。
Mr-Jee 2010-10-28
  • 打赏
  • 举报
回复
既然是服务器请求 那么async设置为false
liang0356 2010-10-28
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 hch126163 的回复:]

function zoomOut() { debugger; latlng = map.fromContainerPixelToLatLng(clickedPixel); mygeocode.getLocations (latlng,function(response) { document.getElementById("toaddress").value = response.Placema……
[/Quote]不行啊,因为这个函数是通过右键菜单来调用的,这个temp是一个实时的地图信息,必须通过 getLocations方法来获得。
hch126163 2010-10-28
  • 打赏
  • 举报
回复
function zoomOut() { debugger; latlng = map.fromContainerPixelToLatLng(clickedPixel); mygeocode.getLocations (latlng,function(response) { document.getElementById("toaddress").value = response.Placemark[0].address; temp = response.Placemark[0].address;anotherFunction(temp); //temp是全局变量 } );

先获取temp,在调用函数
liang0356 2010-10-28
  • 打赏
  • 举报
回复
getLocations(query:String|GLatLng, callback:function)
此方法向 Google 地址解析服务发送请求,要求该服务对指定的 query 进行解析并在指定的 callback 中处理响应您必须传递 callback 方法以处理响应。此响应将包含 Status 代码,如果成功,则会包含一个或多个 Placemark 对象。

这个google提供的一个api, 传递进去的latlng 其实是个经纬度的对象。某次运行的结果如下

- response {...} Object
name "23.386380,112.847443" String
- Placemark {...} Object
- [0] {...} Object
address "中国广东省佛山市三水区" String
+ AddressDetails {...} Object
+ ExtendedData {...} Object
id "p1" String
+ Point {...} Object
+ [1] {...} Object
+ [2] {...} Object
+ [3] {...} Object
+ Status {...} Object

其实我是奇怪,为什么temp会显示上一次的结果呢

Mr-Jee 2010-10-28
  • 打赏
  • 举报
回复
mygeocode.getLocations (latlng,function(response) {
document.getElementById("toaddress").value = response.Placemark[0].address;
temp = response.Placemark[0].address; //temp是全局变量
}
);

这个不是执行里面的代码 而是定义(不知道是事件还是函数定义,你的getLocations我不知道是什么)
Exodia 2010-10-28
  • 打赏
  • 举报
回复
代码贴全些
liang0356 2010-10-28
  • 打赏
  • 举报
回复
补充个问题,其实temp不是undefined,而是显示上次结果的值。比如我再次调用zoomOut的话,temp的值会是上一次的值。

87,996

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧