3 回答

TA貢獻(xiàn)1943條經(jīng)驗(yàn) 獲得超7個(gè)贊
首先javascript腳本是線性執(zhí)行的
<javascript>
運(yùn)算A
運(yùn)算B
運(yùn)算C
</javascript>
執(zhí)行了"A"才會(huì)執(zhí)行B,然后才會(huì)執(zhí)行C
之所以出現(xiàn)你說的異步現(xiàn)象。是因?yàn)槟阏{(diào)用BMap.Map類getPoint是個(gè)ajax
這個(gè)ajax是一個(gè)http請求。不受javascript程序執(zhí)行的限制
因?yàn)椤etPoint就跳出了這個(gè)javascript腳本。自己去執(zhí)行了,而腳本繼續(xù)下一個(gè)語句alert(d1)
因此-----------
function(point){
if (point) {
map.centerAndZoom(point, 16);
map.addOverlay(new BMap.Marker(point));
d1=point.lng;
}
}
----------------------
這個(gè)ajax反回后才執(zhí)行的方法。并沒有工作
所以d1沒有=point.lng
如果象得到ajax請求后的d1結(jié)果
請?jiān)?br/>d1=point.lng;后面加入:
alert(d1);

TA貢獻(xiàn)1848條經(jīng)驗(yàn) 獲得超10個(gè)贊
ajax框架很多都提供了同步訪問的功能,但是不推薦使用,因?yàn)樵诘却龜?shù)據(jù)返回時(shí),ui線程被占用,是瀏覽器出現(xiàn)無法響應(yīng)的情況。
可以使用setTimeOut來設(shè)置延時(shí)等待數(shù)據(jù)返回。
示例代碼如下。
var d1=-1;
var waitTimer=null;
//doajax
var doSuccess = fucntion(){
if(d1!=-1)
{
alert(d1);
}else{
waiTimer = setTimeOut(doSuccess,100);//設(shè)置100毫秒的延時(shí)
}
};
doSuccess ();
不保證代碼的正確性,只是告訴你大概的思路。

TA貢獻(xiàn)1818條經(jīng)驗(yàn) 獲得超8個(gè)贊
var map = new BMap.Map("container");
var myGeo = new BMap.Geocoder();
var address="金沙江路129號(hào)";
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);
}
添加回答
舉報(bào)