zoukankan      html  css  js  c++  java
  • 微信小程序正确的异步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,其他的百度大佬的博客。

  • 相关阅读:
    opencv出现问题:/usr/lib/x86_64-linux-gnu/libpng16.so.16: undefined reference to `inflateValidate@ZLIB_1.2.9'
    SCI-HUB 解锁论文的正确姿势——如何免费下载论文
    VS2019 实现与 Linux服务器同步
    VS Code 写代码实时同步服务器【Sftp插件】
    Docker实用技巧(二):容器与主机之间复制文件
    Docker实用技巧(一):镜像的备份/保存/加载/删除
    mycat注解及高可用(三)
    mycat分片及主从(二)
    SVN中trunk,branches,tags用法详解
    寄存器的英文全称
  • 原文地址:https://www.cnblogs.com/FollowWinds/p/8335016.html
Copyright © 2011-2022 走看看