闭包和异步的问题

0 views
Skip to first unread message

臭豆腐

unread,
Nov 25, 2009, 10:11:08 PM11/25/09
to 谷歌地图 API 论坛
<?php
$people = array(
0 => array(
'name' => '刘德华',
'address' => '香港',
'maxdistance' => '1000',
),
1 => array(
'name' => '金城武',
'address' => '日本',
'maxdistance' => '2000',
),
2 => array(
'name' => '刘若英',
'address' => '浙江',
'maxdistance' => '3000',
),
3 => array(
'name' => '聂远',
'address' => '杭州',
'maxdistance' => '8000',
)
);
$people = json_encode($people);
$jobaddress = '广东佛山';
?>

<script type="text/javascript">
function initialize() {
var people = eval('('+'<?php echo $people;?>'+')');
var directions = new GDirections();
for(i = 0, max = people.length; i < max; i++){
var currentPerson = people[i];
var onDirectionLoad = function(dr,currentPerson){
return function(){
if(dr.getStatus().code == G_GEO_SUCCESS)
{
var distance = dr.getDistance().meters;
var listDiv = document.getElementById
('userlist');
var maxdistance = currentPerson.maxdistance *
1000;
alert(distance+','+maxdistance);
if(distance * 1 <= maxdistance){
document.write(currentPerson.name+'<br /
>');
}
}
}
}
GEvent.addListener(directions, "load", onDirectionLoad
(directions,currentPerson));
directions.load("from: "+"<?php echo $jobaddress;?>"+" to:
"+currentPerson.address);
}
}
</script>
我的目的是要将PHP产生的数组进行筛选,最终显示出距离(这个距离是最短驾车距离,不是直线距离)广州佛山不超过他们各自的最远出行距离。

现在遇到的问题是,由于异步的原因,directions.getDistance().meters得到的总是最后一个人的距离,于是我将代码封装成
闭包,如下:
for(i = 0, max = people.length; i < max; i++){
var currentPerson = people[i];
var loadDirections = function(directions,from,currentPerson){
return function(){
var onDirectionLoad = function(dr,currentPerson){
return function(){
if(dr.getStatus().code == G_GEO_SUCCESS)
{
var distance = dr.getDistance().meters;
var maxdistance = currentPerson.maxdistance *
1000;
if(distance * 1 <= maxdistance){
document.write(currentPerson.name+'<br /
>');
}
}
}
}
GEvent.addListener(directions, "load", onDirectionLoad
(directions,currentPerson));
directions.load("from: "+from+" to:
"+currentPerson.address);
}
}
loadDirections(directions,'<?php echo $jobaddress;?
>',currentPerson);
}
但是这样就什么都不输出了,不解!!!!

请达人赐教啊!!!!

李白,字一日

unread,
Nov 26, 2009, 12:15:07 AM11/26/09
to 谷歌地图 API 论坛
请看置顶中关于GDirections的使用.

臭豆腐

unread,
Nov 26, 2009, 8:11:36 PM11/26/09
to 谷歌地图 API 论坛
现在是串连化实现的,速度慢一些,不知道有没有别的办法。
<script type="text/javascript">
var people = <?php echo $people;?>;
var i = 0;
var max = people.length;
function go() {
var directions = new GDirections();
var currentPerson = people[i];
var onDirectionLoad = function(currentPerson){
return function(){
if(directions.getStatus().code == G_GEO_SUCCESS)
{
var distance = directions.getDistance().meters;
var listDiv = document.getElementById('userlist');
var max_distance = currentPerson.maxdistance * 1000;
if(distance * 1 <= max_distance){
listDiv.innerHTML += currentPerson.name
+','+currentPerson.address+','+distance+','+max_distance+',YES<br />';
}else{
listDiv.innerHTML += currentPerson.name
+','+currentPerson.address+','+distance+','+max_distance+',NO<br />';
}
i++;
if(i < max){
go();
}
}
}
}
GEvent.addListener(directions, "load", onDirectionLoad
(currentPerson));
directions.load("from: <?php echo $jobaddress;?> to:
"+currentPerson.address);
> > 请达人赐教啊!!!!- 隐藏被引用文字 -
>
> - 显示引用的文字 -
Reply all
Reply to author
Forward
0 new messages