• 微信小程序正确的异步request请求,根据经纬度获取地理位置信息


    微信小程序的所有request请求都是异步的,不支持同步。但是在请求时可能会耗费一定时间,这样的话在获取返回数据时可能方法还没有执行完就已经进行赋值操作了。我遇到的就是拿到的数据为undefined。

    解决办法,使用回调函数,等操作完成后再更改原来的值。

    贴代码:(这是根据经纬度获取地理位置的一个方法)

    function GetAddress(latitude, longtitude, callback, errorCallback) {
      var geturl = 'https://api.map.baidu.com/geocoder/v2/?ak=自己去申请后替换&location=' + latitude + ',' + longtitude + '&output=json'
      wx.request({
        url: geturl,
        method: 'GET',
        header: {
          'content-type': 'application/json'
        },
        success: function (res) {
          //json处理
          var jsonStr=JSON.stringify(res.data)
          jsonStr = jsonStr.replace(/[\]/g, '')
          jsonStr = jsonStr.substring(jsonStr.indexOf('(') + 1, jsonStr.indexOf(')'))
          var json=JSON.parse(jsonStr)
          if (typeof callback == "function")
          callback(json.result.formatted_address)
        },
        fail: function () {
          if (typeof errorCallback == "function")
          errorCallback("获取失败")
        }
      })
    }

    因为返回的json格式有点问题,我进行了处理在转成Json的。这个用的是百度地图的api来获取,链接里面的AK参数就appkey,需要去百度地图官网的控制台申请,http://lbsyun.baidu.com/apiconsole/key。

    下面的是调用

        var s = com.GetAddress(23.10229, 113.3345211,
         function (data) {
          console.log(data);
        }, function (data) {
          console.error(data);
        })

    小程序模块的引用就不多说了。

    这个是接口返回的json

    renderReverse&&renderReverse({"status":0,"result":{"location":{"lng":113.33452109999998,"lat":23.102290010605964},"formatted_address":"广东省广州市海珠区新港中路479","business":"新港,赤岗,客村","addressComponent":{"country":"中国","country_code":0,"country_code_iso":"CHN","country_code_iso2":"CN","province":"广东省","city":"广州市","city_level":2,"district":"海珠区","town":"","adcode":"440105","street":"新港中路","street_number":"479","direction":"附近","distance":"2"},"pois":[],"roads":[],"poiRegions":[],"sematic_description":"710鲜果附近12米","cityCode":257}})

    方法是直接就可以用的,关于回调,单个的异步请求可以用回调函数,多个异步操作需要用promise,其他的百度大佬的博客。

  • 相关阅读:
    python之re(正则表达式)
    virtualbox之下载地址
    数据库之sqlite
    vmware 虚拟机扩展 liunx系统硬盘空间
    常见python面试题-手写代码系列
    Python的Struct模块
    mac上安装brew如何加速
    outlook数字证书导出、导入及解决老是弹出macOS需要访问系统钥匙串弹窗问题
    docker命令学习
    Message from syslogd不停的打日志
  • 原文地址:https://www.cnblogs.com/FollowWinds/p/8335016.html
Copyright © 2020-2023  润新知