猿问

求问,关于javascript的回调函数同步问题?求大佬帮忙看看!

我有如下代码,执行结果是ALERT显示0(回调的结果肯定不是0)。我想可能是因为回调函数的异步问题,但又不能将ALERT放在回调函数内(有其它原因的),如果的确零步执行原因的话,有什么办法将异步改成同步?即等回调函数返回后在执行后面的JAVASCRIPT代友。请直接帮我改好,谢谢。
<script type="text/javascript" LANGUAGE= "JavaScript">
var map = new BMap.Map("container"); 
var myGeo = new BMap.Geocoder(); 
var address="金沙江路129号";
var d1=0;
myGeo.getPoint(address, function(point){ 
if (point) {
map.centerAndZoom(point, 16); 
map.addOverlay(new BMap.Marker(point)); 
d1=point.lng;

}, "上海市"); 

alert(d1);

</script>

不负相思意
浏览 239回答 3
3回答

杨__羊羊

首先javascript脚本是线性执行的<javascript>运算A运算B运算C</javascript>执行了"A"才会执行B,然后才会执行C之所以出现你说的异步现象。是因为你调用BMap.Map类getPoint是个ajax这个ajax是一个http请求。不受javascript程序执行的限制因为。getPoint就跳出了这个javascript脚本。自己去执行了,而脚本继续下一个语句alert(d1)因此-----------function(point){if (point) {map.centerAndZoom(point, 16);map.addOverlay(new BMap.Marker(point));d1=point.lng;}}----------------------这个ajax反回后才执行的方法。并没有工作所以d1没有=point.lng如果象得到ajax请求后的d1结果请在d1=point.lng;后面加入:alert(d1);

慕桂英546537

ajax框架很多都提供了同步访问的功能,但是不推荐使用,因为在等待数据返回时,ui线程被占用,是浏览器出现无法响应的情况。可以使用setTimeOut来设置延时等待数据返回。示例代码如下。var d1=-1;var waitTimer=null;//doajaxvar doSuccess = fucntion(){if(d1!=-1){alert(d1);}else{waiTimer = setTimeOut(doSuccess,100);//设置100毫秒的延时}};doSuccess ();不保证代码的正确性,只是告诉你大概的思路。

弑天下

var map = new BMap.Map("container");var myGeo = new BMap.Geocoder();var address="金沙江路129号";var d1=0;myGeo.getPoint(address, function(point){if (point) {map.centerAndZoom(point, 16);map.addOverlay(new BMap.Marker(point));d1=point.lng;outer();}}, "上海市");function outer(){alert(d1);}
随时随地看视频慕课网APP
我要回答