3 回答

TA貢獻1943條經驗 獲得超7個贊
首先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);

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

TA貢獻1818條經驗 獲得超8個贊
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);
}
添加回答
舉報