微信小程序正确的异步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,其他的百度大佬的博客。

原文地址:https://www.cnblogs.com/ChenGg/p/8335016.html

时间: 2024-10-03 17:04:38

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

关于微信小程序拒绝授权后,重新授权并获取用户信息

最近公司做了一些有关微信小程序的项目,涉及到授权获取用户基本信息,但是在拒绝授权之后就不会再出现授权窗口: 看网上也有很多人遇到了同样的问题,所以记录下来我的处理方法,供大家和自己学习和记录: 当调用小程序 wx.getUserInfo(OBJECT) 获取用户基本信息时,需要用户进行授权操作,如果用户点击了拒绝,则再次调用该方法就不会出现对应的授权窗口,很是让人困惑: 找了许久,最后让我发现了它:------> wx.openSetting(OBJECT),下面让我们认识一下: wx.open

微信小程序自动定位,通过百度地图根据经纬度获取该地点所在城市信息

微信小程序获得经纬度 var that = this wx.getLocation({ type: 'wgs84', success(res) { console.log(res) that.setData({ latitude: res.latitude, longitude: res.longitude }) } }) 百度地图api 'https://api.map.baidu.com/geocoder/v2/?location=' + res.latitude+',' + res.lon

微信小程序 在使用wx.request时显示加载中

微信小程序中,向后台请求数据是,通常想给用户提示正在加载中,如下图: 我们可以用wx.showLoading(OBJECT),当请求服务器的地方多了,怎么才能不每次都要去调用函数,我们只要对wx.request加工下就可以了,在utils下新建js文件network.js var requestHandler = { url: '', data: {}, method: '', success: function (res) { }, fail: function () { }, complet

微信小程序开发之异步转同步

onLoad: function(options) { //执行同步 return new Promise(function (resolve, reject) { wx.checkSession({ success: function (res) { resolve(res); }, fail: function (res) { //同步代码好了,执行要执行的代码代码 var that = this; wx.request({ url: Util.exeCatalog(), //仅为示例,并非

微信小程序填坑,wx.request() 内调用setData()方法错误的解决办法

再方法内添加一行代码,把this对象赋值给给一个变量供success()方法内调用 核心代码: var v = this.txt; 完整示例 abc:function(e){//该函数用于和后台交互 // var v = e var v = this.txt; var self=this; //关键代码,这要操作程序无法运行 wx.request({ url: 'https://www.kjch.xyz/jous/hello.do', //仅为示例,并非真实的接口地址 data: { name:

微信小程序,错误{"errMsg":"request:fail 小程序要求的 TLS 版本必须大于等于 1.2"}

解决方法一: 开发环境,项目--->勾选不校验即可 解决办法二: 在 PowerShell中运行以下内容, 然后重启服务器 # Enables TLS 1.2 on windows Server 2008 R2 and Windows 7 # These keys do not exist so they need to be created prior to setting values. md "HKLM:\SYSTEM\CurrentControlSet\Control\Securi

微信小程序 网络请求之re.request 和那些坑

微信小程序有四种网络请求类型,下面只详细介绍普通HTTPS请求(wx.request) 普通HTTPS请求(wx.request) 上传文件(wx.uploadFile) 下载文件(wx.downloadFile) WebSocket通信(wx.connectSocket) 首先,先确认是否设置了合法域名,或者在开发环境下不校验合法域名.关于设置合法域名请看→微信小程序 网络请求之设置合法域名   以下是wx.request的详细说明,截图于微信小程序开发文档 在微信index.js 发起一个普

微信小程序:wx.request之post请求后端无法获取数据的问题

前言:小程序的开发中总是踩到各种坑,看文档也不知所云: 例如当我们在写微信小程序接口时,method请求方式有POST和GET两种,为了数据安全,我们会偏向于使用POST请求方式访问服务器端: 问题:当我们使用POST方式请求时,后端无法获取数据,但使用GET方式便可以获取数据?? 解决办法: 设置请求的 header: header: { "Content-Type": "application/x-www-form-urlencoded" }, 例如:

微信小程序--火车票查询

原文:http://www.cnblogs.com/tgyf/p/5960979.html 写在最前面 微信小程序自九月份推出内测资格以来,经历了舆论热潮到现在看似冷清,但并不意味着大家不那么关注或者不关注了.我想不管是否有内测资格,只要是感兴趣的开发者已经进入潜心耕耘产品的阶段了,至少是静下心来思考与学习.如果对微信小程序的前途和定位有什么疑惑,可以看看这篇文章http://lib.csdn.net/article/wechat/46742. 下面从字母a开始编号的内容主要作为后续学习与思考后