成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

JavaScript中獲取地理位置方法的小總結(jié)

1treeS / 2111人閱讀

摘要:獲取地理位置的方式,介紹兩種,一種是使用微信的接口,另外一種是使用百度地圖。到此為止,在微信瀏覽器中獲取用戶的地理位置即可完成,在用戶首次進(jìn)入該頁(yè)面時(shí),會(huì)提示用戶是否給頁(yè)面授權(quán)使用地理位置,授權(quán)成功之后,將不會(huì)再次提示。

獲取地理位置的方式,介紹兩種,一種是使用微信的JSSDK接口,另外一種是使用百度地圖API。

1.微信JSSDK獲取地理位置

在微信瀏覽器中,使用JSSDK提供的接口,定位設(shè)備所在的位置,步驟如下:

step1,綁定域名

先登錄微信公眾平臺(tái)進(jìn)入“公眾號(hào)設(shè)置”的“功能設(shè)置”里填寫“JS接口安全域名”(使你的域名獲得使用接口的權(quán)限)
備注:登錄后可在“開發(fā)者中心”查看對(duì)應(yīng)的接口權(quán)限。

step2,引入JS文件

在需要調(diào)用JS接口的頁(yè)面引入如下JS文件,(支持https):
https://map.qq.com/api/js?v=2...
http://res.wx.qq.com/open/js/...
備注:支持使用 AMD/CMD 標(biāo)準(zhǔn)模塊加載方法加載

step3,通過config接口注入權(quán)限驗(yàn)證配置

備注:
1.所有需要使用JSSDK的頁(yè)面都必須配置config,否則無法調(diào)用
2.相同的URL只會(huì)觸發(fā)一次,如果是動(dòng)態(tài)變化的URL,則會(huì)在變化時(shí)主動(dòng)去觸發(fā)
3.Android微信客戶端不支持pushState的H5新特性,所以使用pushState來實(shí)現(xiàn)web app的頁(yè)面會(huì)導(dǎo)致簽名失敗,此問題會(huì)在Android6.2中修復(fù)
4.在js中,可以通過ajax請(qǐng)求去后臺(tái)獲取appId這些,在PHP中可以通過微信JSSDK中的方式獲??;

    $.ajax({
        type: "get",
        url: "后臺(tái)接口URL,去獲取appId等",
        dataType: "jsonp", //與后臺(tái)商議JSONP或者JSON
        jsonp: "callback",
        data: {
            url: location.href.split("#")[0] //當(dāng)前頁(yè)面的URL,此種方式是為了避免在微信中分享只后,會(huì)在URL后追加"#fdsfsd",在這里只需要拿到#之前的部分作為合理的URL
        },
        success: function (result) {
          console.log(result);
            if (result.status == 0) {
                wx.config({
                  debug: false, // 開啟調(diào)試模式,調(diào)用的所有api的返回值會(huì)在客戶端alert出來,若要查看傳入的參數(shù),可以在pc端打開,參數(shù)信息會(huì)通過log打出,僅在pc端時(shí)才會(huì)打印。
                  appId: result.data.appid, // 必填,公眾號(hào)的唯一標(biāo)識(shí)
                  timestamp: result.data.timestamp, // 必填,生成簽名的時(shí)間戳
                  nonceStr: result.data.noncestr, // 必填,生成簽名的隨機(jī)串
                  signature: result.data.signature, // 必填,簽名
                  jsApiList: ["checkJsApi","getLocation"] // 必填,使用的JSSSK接口,其中checkJSAPI是必填的,可以提前檢測(cè)客戶端是否支持你所使用的接口,如果不支持,則采用其他方式處理
                });
             }
        },
        error: function(err){
            console.log(err); //ajax請(qǐng)求失敗
        }
    })
step4,通過ready接口處理成功驗(yàn)證

wx.ready(function(){

// config信息驗(yàn)證后會(huì)執(zhí)行ready方法,所有接口調(diào)用都必須在config接口獲得結(jié)果之后,
// config是一個(gè)客戶端的**異步操作**,所以如果需要在頁(yè)面加載時(shí)就調(diào)用相關(guān)接口,則須把相關(guān)接口放在**ready函數(shù)中調(diào)用來確保正確執(zhí)行**。
// 對(duì)于用戶觸發(fā)時(shí)才調(diào)用的接口,則可以直接調(diào)用,不需要放在ready函數(shù)中。

});

所有接口通過wx對(duì)象(也可使用jWeixin對(duì)象)來調(diào)用,參數(shù)是一個(gè)對(duì)象,除了每個(gè)接口本身需要傳的參數(shù)之外,還有以下通用參數(shù):

1.success:接口調(diào)用成功時(shí)執(zhí)行的回調(diào)函數(shù)。
2.fail:接口調(diào)用失敗時(shí)執(zhí)行的回調(diào)函數(shù)。
3.complete:接口調(diào)用完成時(shí)執(zhí)行的回調(diào)函數(shù),無論成功或失敗都會(huì)執(zhí)行。
4.cancel:用戶點(diǎn)擊取消時(shí)的回調(diào)函數(shù),僅部分有用戶取消操作的api才會(huì)用到。
5.trigger: 監(jiān)聽Menu中的按鈕點(diǎn)擊時(shí)觸發(fā)的方法,該方法僅支持Menu中的相關(guān)接口

備注:不要嘗試在trigger中使用ajax異步請(qǐng)求修改本次分享的內(nèi)容,因?yàn)榭蛻舳朔窒聿僮魇且粋€(gè)同步操作,這時(shí)候使用ajax的回包會(huì)還沒有返回。

以上幾個(gè)函數(shù)都帶有一個(gè)參數(shù),類型為對(duì)象,其中除了每個(gè)接口本身返回的數(shù)據(jù)之外,還有一個(gè)通用屬性errMsg,其值格式如下:

調(diào)用成功時(shí):"xxx:ok" ,其中xxx為調(diào)用的接口名
用戶取消時(shí):"xxx:cancel",其中xxx為調(diào)用的接口名

wx.ready(function () {
    wx.getLocation({
    type: "wgs84", // 默認(rèn)為wgs84的gps坐標(biāo),如果要返回直接給openLocation用的火星坐標(biāo),可傳入"gcj02"
    success: function (res) {
    // res 中返回經(jīng)度和緯度,可以根據(jù)需求是否轉(zhuǎn)換為QQ地圖的精度
      let geocoder = new qq.maps.Geocoder({
        complete: function (result) {
        // result的值打印出來如下所示,可以拿到地址和對(duì)應(yīng)的城市名等信息,見下圖。                       
          var city = result.detail.addressComponents.city; 
          // to do what you want 
        }
      })
      var coord = new qq.maps.LatLng(res.latitude, res.longitude)
      geocoder.getAddress(coord);
    },
    cancel: function (res) {
      console.log("用戶拒絕授權(quán)獲取地理位置");
    },
    fail: function (res) {
      alert(JSON.stringify(res));
    }
  });
});
step5,通過error接口處理失敗驗(yàn)證

wx.error(function(res){

// config信息驗(yàn)證失敗會(huì)執(zhí)行error函數(shù),如簽名過期導(dǎo)致驗(yàn)證失敗,具體錯(cuò)誤信息可以打開config的debug模式查看,也可以在返回的res參數(shù)中查看,對(duì)于SPA可以在這里更新簽名。

});

到此為止,在微信瀏覽器中獲取用戶的地理位置即可完成,在用戶首次進(jìn)入該頁(yè)面時(shí),會(huì)提示用戶是否給頁(yè)面授權(quán)使用地理位置,授權(quán)成功之后,將不會(huì)再次提示。

2.百度地圖API獲取地理位置 step1,引入js文件

http://api.map.baidu.com/api?...

step2,初始化位置對(duì)象,調(diào)用getCurrentPosition方法獲取位置
var geolocation = new BMap.Geolocation();
    geolocation.getCurrentPosition(function(r){
        if(this.getStatus() == BMAP_STATUS_SUCCESS){
            alert("您的位置:"+r.point.lng+","+r.point.lat);
        }
        else {
            alert("failed"+this.getStatus());
        }        
    },{enableHighAccuracy: true})
step3,將經(jīng)緯度轉(zhuǎn)換為具體位置
**此方法應(yīng)該在getCurrentPosition的回調(diào)中執(zhí)行;**
geoc.getLocation(r.point, function(rs){
    var addComp = rs.addressComponents;
    alert(addComp.province + ", " + addComp.city + ", " + addComp.district + ", " + addComp.street + ", " + addComp.streetNumber);
}

即可打印出你現(xiàn)在的街道的位置,很簡(jiǎn)單對(duì)不對(duì)?。。?br>但是在微信中使用此方法時(shí),每次進(jìn)入頁(yè)面都會(huì)提示用戶授權(quán),可能是微信自己的隱私保護(hù)之類的原因吧。

福利筆記^_^

獲取當(dāng)前URL中的參數(shù),需要注意的是最后的decodeURI,對(duì)于有中文的參數(shù)值非常有用。

function GetQueryString(name){
  var reg = new RegExp("(^|&)"+ name +"=([^&]*)(&|$)");
  var r = window.location.search.substr(1).match(reg);
  if(r!=null)
    return  decodeURI(r[2]);
 

參考文獻(xiàn):
https://mp.weixin.qq.com/wiki...
http://lbsyun.baidu.com/jsdem...

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/95731.html

相關(guān)文章

  • HTML表單(來自MDN的總結(jié)

    摘要:多個(gè)標(biāo)簽原生表單部件通用屬性默認(rèn)這個(gè)布爾屬性允許您指定當(dāng)頁(yè)面加載時(shí)元素應(yīng)該自動(dòng)具有輸入焦點(diǎn),除非用戶覆蓋它,例如通過鍵入不同的控件。元素的名稱這是用于表單數(shù)據(jù)提交的。到目前為止,表單是最常見的攻擊媒介可能發(fā)生攻擊的地方。 表單介紹 HTML表單是用戶和web站點(diǎn)或應(yīng)用程序之間交互的主要內(nèi)容之一。它們?cè)试S用戶將數(shù)據(jù)發(fā)送到web站點(diǎn)。大多數(shù)情況下,數(shù)據(jù)被發(fā)送到web服務(wù)器,但是web頁(yè)面也...

    JouyPub 評(píng)論0 收藏0
  • JavaScript學(xué)習(xí)總結(jié)(一)基礎(chǔ)部分

    摘要:前綴規(guī)范每個(gè)局部變量都需要有一個(gè)類型前綴,按照類型可以分為表示字符串。例如,表示以上未涉及到的其他對(duì)象,例如,表示全局變量,例如,是一種區(qū)分大小寫的語言。布爾值與字符串相加將布爾值強(qiáng)制轉(zhuǎn)換為字符串。 基本概念 javascript是一門解釋型的語言,瀏覽器充當(dāng)解釋器。js執(zhí)行時(shí),在同一個(gè)作用域內(nèi)是先解釋再執(zhí)行。解釋的時(shí)候會(huì)編譯function和var這兩個(gè)關(guān)鍵詞定義的變量,編譯完成后從...

    AlanKeene 評(píng)論0 收藏0
  • javascript實(shí)現(xiàn)跨域的方式總結(jié)

    摘要:中的跨域請(qǐng)求應(yīng)該也算是一個(gè)重點(diǎn),具體什么叫跨域,在這里我就不展開了,可以查一下瀏覽器的同源策略和跨域的定義。再看后臺(tái)文件文件接收回調(diào)函數(shù)并把要返回的參數(shù)以參數(shù)注入的方式注入到回調(diào)函數(shù)中,再返回給客戶端。 js中的跨域請(qǐng)求應(yīng)該也算是一個(gè)重點(diǎn),具體什么叫跨域,在這里我就不展開了,可以查一下瀏覽器的同源策略和跨域的定義。原來只知道常用的jsonp和document.domain這兩種方式,這...

    VioletJack 評(píng)論0 收藏0
  • javascriptimport和export用法總結(jié)

    摘要:前者用于服務(wù)器,后者用于瀏覽器。某些打包工具可以允許或要求使用擴(kuò)展名。的形式需要的支持,比如將導(dǎo)出在中的對(duì)象或值。如上,也是的內(nèi)容,和是一對(duì)。比如如命名導(dǎo)出引入的命名導(dǎo)出等價(jià)為,值得注意的是在該模塊中不能直接使用和。 import import 和 require 的區(qū)別 import 和js的發(fā)展歷史息息相關(guān),歷史上 js沒有模塊(module)體系,無法將一個(gè)大程序拆分成互相依賴的...

    ideaa 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<