js使用百度API

帝在人为 2016-11-23 02:32:57
[code=javascript
var map = new BMap.Map("allmap");
map.centerAndZoom(new BMap.Point(118.76878380699998,32.0847198606), 12);
var gc = new BMap.Geocoder(); //获取地点信息
gc.getLocation(point, function(rs) {
var addComp = rs.addressComponents;
var mapAddress = addComp.province+addComp.city + addComp.district+ addComp.street + addComp.streetNumber;
});]
return mapAddress; //报错
[/code]
这是一个输入经纬度获取地址的脚本 在外部使用mapAddress会报未定义 怎样可以在外部使用mapAddress变量
我试了 在getLocation前声明 mapAddress 和 在getLoction 内return mapAddress;都没用 外部还是使用不了
...全文
247 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
赵4老师 2016-11-24
  • 打赏
  • 举报
回复
不要做A语言代码修改为B语言代码的无用功。 也不要做用A语言代码直接调用B语言代码库这样复杂、这样容易出错的傻事。 只需让A、B语言代码的输入输出重定向到文本文件,或修改A、B语言代码让其通过文本文件输入输出。 即可很方便地让A、B两种语言之间协调工作。 比如: A将请求数据写到文件a.txt,写完后改名为aa.txt B发现aa.txt存在时,读取其内容,调用相应功能,将结果写到文件b.txt,写完后删除aa.txt,改名为bb.txt A发现bb.txt存在时,读取其内容,读完后删除bb.txt 以上A可以替换为任何一种开发语言或开发环境,B可以替换为任何一种与A不同的开发语言或开发环境。 除非A或B不支持判断文件是否存在、文件读写和文件更名。 但是谁又能举出不支持判断文件是否存在、文件读写和文件更名的开发语言或开发环境呢? 可以将临时文件放在RamDisk上提高效率减少磨损磁盘。 数据的结构很复杂的话,文本文件的格式问题可参考json或xml 共享临时文本文件这种进程之间的通讯方法相比其它方法的优点有很多,下面仅列出我现在能想到的: ·进程之间松耦合 ·进程可在同一台机器上,也可跨机,跨操作系统,跨硬件平台,甚至跨国。 ·方便调试和监视,只需让第三方或人工查看该临时文本文件即可。 ·方便在线开关服务,只需删除或创建该临时文本文件即可。 ·方便实现分布式和负载均衡。 ·方便队列化提供服务,而且几乎不可能发生队列满的情况(除非硬盘空间满) ·…… “跨语言、跨机,跨操作系统,跨硬件平台,跨国,跨*.*的”苦海无边, 回头是“使用共享纯文本文件进行信息交流”的岸!
帝在人为 2016-11-24
  • 打赏
  • 举报
回复
有道理有道理 多谢赵四老师
帝在人为 2016-11-23
  • 打赏
  • 举报
回复
引用 3 楼 lvbang_lzt 的回复:
[quote=引用 2 楼 qq_31970173 的回复:] 第12行的 return addr 是没有用的 我试过 在外部还是无法使用addr变量
因为你的没有事件触发,我是添加了 map.addEventListener("click", function(e){ } 点击之后才能触发事件,这样才有数据返回。如果页面加载之后,直接点击按钮返回的是undefined,也是取不到数据。 你要根据你自己的情况来使用。代码里面只是演示了,在外部定义个变量,是可以接收到返回的。[/quote]
引用 4 楼 showbo 的回复:
解码是异步的,还没执行你的解码回掉都已经return了,当然没有值,而且你那个变量是匿名函数里面的,return那句根本无法访问到,报错了,要使用解码结果的值要做成回掉的形式,而不是return
    function getAttr(callback) {
        var map = new BMap.Map("allmap");
        map.centerAndZoom(new BMap.Point(118.76878380699998, 32.0847198606), 12);
        var gc = new BMap.Geocoder();                //获取地点信息
        gc.getLocation(point, function (rs) {
            var addComp = rs.addressComponents;
            var mapAddress = addComp.province + addComp.city + addComp.district + addComp.street + addComp.streetNumber;
            callback(mapAddress)
        });
     //   return mapAddress;
    }

    getAttr(function (addr) {alert(addr) })
两位大神 有办法吗
帝在人为 2016-11-23
  • 打赏
  • 举报
回复
版主大神 看下我楼上的详细问题内容 有办法取出mapAddress变量值吗
帝在人为 2016-11-23
  • 打赏
  • 举报
回复
恩 我按你说的试了下 是可行的 但不是我想要实现的功能 是我问题没写清 我是在MFC中通过CWebPage类调用的javascript函数 函数的功能是输入经纬度返回一个详细地址 但是现在的问题是 可以在js函数中 使用 alert 看到地址信息 但是这个变量无法返回给MFC javascript函数为
function justmarkfun(JD,WD)
{
     var point = new BMap.Point(JD, WD);  //把地图中心定位到搜索的点
     map.centerAndZoom(point, 12);
     var marker1 = new BMap.Marker(new BMap.Point(JD,WD));  // 创建标注
     window.map.addOverlay(marker1);              // 将标注添加到地图中
     var gc = new BMap.Geocoder();                //获取地点信息
     var mapAddress;
     gc.getLocation(point, function(rs){
        var addComp = rs.addressComponents;
        mapAddress = addComp.province+addComp.city + addComp.district+ addComp.street + 

addComp.streetNumber;
        alert(mapAddress);
     });
 
//   return mapAddress;   //出现未定义报错     无法取出那个值
 
}
有没有办法取出mapAddress变量值?
Go 旅城通票 2016-11-23
  • 打赏
  • 举报
回复
解码是异步的,还没执行你的解码回掉都已经return了,当然没有值,而且你那个变量是匿名函数里面的,return那句根本无法访问到,报错了,要使用解码结果的值要做成回掉的形式,而不是return
    function getAttr(callback) {
        var map = new BMap.Map("allmap");
        map.centerAndZoom(new BMap.Point(118.76878380699998, 32.0847198606), 12);
        var gc = new BMap.Geocoder();                //获取地点信息
        gc.getLocation(point, function (rs) {
            var addComp = rs.addressComponents;
            var mapAddress = addComp.province + addComp.city + addComp.district + addComp.street + addComp.streetNumber;
            callback(mapAddress)
        });
     //   return mapAddress;
    }

    getAttr(function (addr) {alert(addr) })
lzh_me 2016-11-23
  • 打赏
  • 举报
回复
引用 2 楼 qq_31970173 的回复:
第12行的 return addr 是没有用的 我试过 在外部还是无法使用addr变量
因为你的没有事件触发,我是添加了 map.addEventListener("click", function(e){ } 点击之后才能触发事件,这样才有数据返回。如果页面加载之后,直接点击按钮返回的是undefined,也是取不到数据。 你要根据你自己的情况来使用。代码里面只是演示了,在外部定义个变量,是可以接收到返回的。
帝在人为 2016-11-23
  • 打赏
  • 举报
回复
第12行的 return addr 是没有用的 我试过 在外部还是无法使用addr变量
lzh_me 2016-11-23
  • 打赏
  • 举报
回复

<body>
    <div id="allmap"></div>
    <p>点击地图展示详细地址</p>
    <input name="but" type="button" value="click" onclick="toShowAddress();" id="button_" />
</body>
</html>
<script type="text/javascript">
    // 百度地图API功能
    var map = new BMap.Map("allmap");
    var point = new BMap.Point(116.331398,39.897445);
    map.centerAndZoom(point,12);
    var geoc = new BMap.Geocoder();    
    var addr;
    map.addEventListener("click", function(e){        
        var pt = e.point;
        geoc.getLocation(pt, function(rs){
            var addComp = rs.addressComponents;
            addr = addComp.province + ", " + addComp.city + ", " + addComp.district + ", " + addComp.street + ", " + addComp.streetNumber;
            alert(addr);
            return addr;
        });        
    });
    
    function toShowAddress(){
        alert(addr);
    }
</script>

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧