Javascript gmap3在信息窗口中显示地址

Javascript gmap3在信息窗口中显示地址,javascript,jquery,google-maps,google-maps-api-3,Javascript,Jquery,Google Maps,Google Maps Api 3,我在地图标记上有一个单击事件来创建一个信息窗口,我正在尝试对地址进行地理编码以显示在信息窗口内 click: function(marker) { pantoUser(lati,longi,i); addInfoWindow(lati,longi,name,datestring); } 我几乎让它像这样工作: function addInfoWindow(lati,longi,nam

我在地图标记上有一个单击事件来创建一个信息窗口,我正在尝试对地址进行地理编码以显示在信息窗口内

            click: function(marker) {
                pantoUser(lati,longi,i);
                addInfoWindow(lati,longi,name,datestring);
            }
我几乎让它像这样工作:

function addInfoWindow(lati,longi,name,datestring)
{
 // get address  
getAddress(lati,longi);

 // create infowindow
$('#dispatcher').gmap3(
  { action: 'addInfoWindow',
    latLng: [lati, longi],
    infowindow:{
      options:{
        content: name
      },
      events:{
        closeclick: function(infowindow, event){
          //alert('closing : ' + $(this).attr('id') + ' : ' + infowindow.getContent());
        }
      },
      apply:[
        { action:'setContent', 
          args:[
          '<span class="infowindow">' + name + '<br />' + content + '<br />' + datestring + '<span>'
          ]
        }
      ]
    }
  }
);
问题是,地理编码地址总是落后一个标记点。例如,我可能在伦敦点击一个标记,但什么也没发生。所以我再次点击它,我得到了带有地址的信息窗口。然后我点击曼彻斯特的一个标记,我仍然看到伦敦的地址,然后我点击利物浦的一个标记,我得到了曼彻斯特的地址。等等

有人能发现这个虫子吗

SEAN更新的工作解决方案 在回调中添加了infowindow代码

function addInfoWindow(lati,longi,name,datestring)
{
// get address
$("#dispatcher").gmap3({
     action:'getAddress',
     latLng: [lati, longi],
     callback:function(results){
     content = results && results[1] ? results && results[1].formatted_address : 'No Address';

// create infowindow       
$('#dispatcher').gmap3(
  { action: 'addInfoWindow',
    latLng: [lati, longi],
    infowindow:{
      options:{
        content: name
      },
      events:{
        closeclick: function(infowindow, event){
          //alert('closing : ' + $(this).attr('id') + ' : ' + infowindow.getContent());
        }
      },
      apply:[
        { action:'setContent', 
          args:[
          '<span class="infowindow">' + name + '<br />' + content + '<br />' + datestring + '<span>'
          ]
        }
      ]
    }
  }
);

    } // end callback

 });
函数AddInfo窗口(纬度、经度、名称、日期字符串)
{
//获取地址
$(“#调度程序”).gmap3({
操作:'getAddress',
拉丁语:[拉丁语,拉丁语],
回调:函数(结果){
content=results&&results[1]?results&&results[1]。格式化的_地址:“无地址”;
//创建信息窗口
$(“#调度程序”).gmap3(
{操作:“AddInfo窗口”,
拉丁语:[拉丁语,拉丁语],
信息窗口:{
选项:{
内容:姓名
},
活动:{
关闭单击:功能(信息窗口、事件){
//警报('closing:'+$(this.attr('id')+':'+infowindow.getContent());
}
},
适用于:[
{操作:'setContent',
args:[
''+name+'
'+content+'
'+datestring+'' ] } ] } } ); }//结束回调 });

}

这看起来不像标准的谷歌地图JavaScript v3代码;
gmap3
引用的是来自jQuery的东西吗?另外,有些东西似乎没有联系在一起,
getAddress
函数返回
content
,但是
addinfo窗口中的代码似乎没有使用该值

但听起来问题的根源可能在于
getAddress
函数中的
回调方面;当
addInfo窗口中调用后的代码运行时,您无法确定回调是否已完成。听起来可能会发生以下情况:

  • addInfo窗口
    函数被调用
  • addInfo窗口中
    调用
    getAddress
    函数
  • getAddress
    快速运行并完成,将控制权返回到
    addInfo窗口
    函数,但回调尚未运行
  • 代码第一次运行时,
    内容
    尚未生成(因为回调尚未运行),因此不会显示任何内容
  • 返回
    addInfo窗口
    函数后,会运行
    getAddress
    回调,因为收到了响应,从而建立了
    内容
  • 再次调用
    addInfo窗口
    ,以相同的方式运行,但这次它使用上次回调后设置的内容,因此它使用上一次运行中的
    内容
  • 场景只是重复,重复,重复
  • 您的问题中有一些令人困惑的部分,如果不能够向代码中添加
    alert
    调用或看到代码运行,就有点难以确定,但听起来很可能您的代码遵循了我上面描述的步骤或类似的操作


    如果这听起来适合您的问题,最简单的解决方法是将
    InfoWindow
    显示代码与回调代码放在一起。这样,您就知道内容已经设置好了,因为回调在返回响应时运行。

    Hi Sean,谢谢您的时间。我怀疑问题出在那些线路上。是的,gmap3是谷歌地图api()的jquery插件没有问题;很乐意帮忙。我在回答中又加了一小段,因为你认为我所描述的内容适合你的问题。希望能有帮助-
    function addInfoWindow(lati,longi,name,datestring)
    {
    // get address
    $("#dispatcher").gmap3({
         action:'getAddress',
         latLng: [lati, longi],
         callback:function(results){
         content = results && results[1] ? results && results[1].formatted_address : 'No Address';
    
    // create infowindow       
    $('#dispatcher').gmap3(
      { action: 'addInfoWindow',
        latLng: [lati, longi],
        infowindow:{
          options:{
            content: name
          },
          events:{
            closeclick: function(infowindow, event){
              //alert('closing : ' + $(this).attr('id') + ' : ' + infowindow.getContent());
            }
          },
          apply:[
            { action:'setContent', 
              args:[
              '<span class="infowindow">' + name + '<br />' + content + '<br />' + datestring + '<span>'
              ]
            }
          ]
        }
      }
    );
    
        } // end callback
    
     });