关于javascript的回调函数同步问题
我有如下代码,执行结果是ALERT显示0(回调的结果肯定不是0)。我想可能是因为回调函数的异步问题,但又不能将ALERT放在回调函数内(有其它原因的),如果的确零步执行原...
我有如下代码,执行结果是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> 展开
<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> 展开
6个回答
展开全部
首先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);
<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);
展开全部
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 ();
不保证代码的正确性,只是告诉你大概的思路。
可以使用setTimeOut来设置延时等待数据返回。
示例代码如下。
var d1=-1;
var waitTimer=null;
//doajax
var doSuccess = fucntion(){
if(d1!=-1)
{
alert(d1);
}else{
waiTimer = setTimeOut(doSuccess,100);//设置100毫秒的延时
}
};
doSuccess ();
不保证代码的正确性,只是告诉你大概的思路。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
<script type="text/javascript" LANGUAGE= "JavaScript">
var map = new BMap.Map("container");
var myGeo = new BMap.Geocoder();
var address="金沙江路129号";
var d1=0;
function funMYgetPoint(point)
{
myGeo.getPoint(address, function(point){
map.centerAndZoom(point, 16);
map.addOverlay(new BMap.Marker(point));
d1=point.lng;
}
, "上海市"); alert(d1);
}
//根据情况自己改,这里只执行1次
var stop=1;
function tttt(){
if(point){if(stop>0){funMYgetPoint(point);stop=0;}}else{setTimeout('tttt()',100);}
}
tttt();
//手写代码,未验证,如果报错请追问
</script>
var map = new BMap.Map("container");
var myGeo = new BMap.Geocoder();
var address="金沙江路129号";
var d1=0;
function funMYgetPoint(point)
{
myGeo.getPoint(address, function(point){
map.centerAndZoom(point, 16);
map.addOverlay(new BMap.Marker(point));
d1=point.lng;
}
, "上海市"); alert(d1);
}
//根据情况自己改,这里只执行1次
var stop=1;
function tttt(){
if(point){if(stop>0){funMYgetPoint(point);stop=0;}}else{setTimeout('tttt()',100);}
}
tttt();
//手写代码,未验证,如果报错请追问
</script>
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
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);
}
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);
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
$this.stop().animate({'bottom':'0px'},500);
});//.unbind('click').bind('click',spreadPictures);
#pp_thumbContainer{
/*position:fixed;
bottom:0px;*/
position:absolute;
left:0px;
height:65px;
width:100%;
}
});//.unbind('click').bind('click',spreadPictures);
#pp_thumbContainer{
/*position:fixed;
bottom:0px;*/
position:absolute;
left:0px;
height:65px;
width:100%;
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询