2017-07-07 63 views
0

我正在嘗試製作'cueent天氣應用程序'。 爲此,在我的jQuery代碼片段中,我使用'latitude'&'longitude'這兩個變量。 當我使用當前位置的緯度&分別填充它們時,它發生得非常有效,如我的警報彈出窗口('if'語句內的那個)所反映的那樣。 但是,在'if'語句之外,變量不再保留它們的值,如第二個警報彈出窗口中所示。未填充所需值的變量

<script> 
 
$(document).ready(function(){ 
 
    var latitude = ""; 
 
    var longitude = ""; 
 
    if(navigator.geolocation){ 
 
    navigator.geolocation.getCurrentPosition(function(position){ 
 
     //alert(position.coords.latitude + " " + position.coords.longitude); 
 
     latitude = position.coords.latitude; 
 
     longitude = position.coords.longitude; 
 
    }); 
 
    } 
 
    alert(latitude + " " + longitude); 
 
}); 
 
</script>
body { 
 
    background-color : black; 
 
} 
 

 
.jumbotron { 
 
    background-color : black; 
 
    color : white; 
 
}
<html> 
 
<body> 
 
    <div class="container-fluid" id="main-div"> 
 
    <div class="jumbotron text-center" id="heading-div"> 
 
     <h1 id="heading">Current Weather</hi> 
 
    </div> 
 
    <div class="row" id="weather-row"> 
 
     <div class="col-md-offset-4 col-md-4 col-sm-offset-3 col-sm-6 col-xs-offset-2 col-xs-8" id="weather-column"> 
 
     <div class="row" id="location-row"> 
 
      <div class="col-md-12 col-sm-12 col-xs-12" id="location-column"> 
 
      </div> 
 
     </div> 
 
     <div class="row" id="region-row"> 
 
      <div class="col-md-12 col-sm-12 col-xs-12" id="region-column"> 
 
      </div> 
 
     </div> 
 
     <div class="row" id="icon-row"> 
 
      <div class="col-md-12 col-sm-12 col-xs-12" id="icon-column"> 
 
      </div> 
 
     </div> 
 
     <div class="row" id="summary-row"> 
 
      <div class="col-md-12 col-sm-12 col-xs-12" id="summary-column"> 
 
      </div> 
 
     </div> 
 
     <div class="row" id="temp-row"> 
 
      <div class="col-md-12 col-sm-12 col-xs-12" id="temp-column"> 
 
      </div> 
 
     </div> 
 
     </div> 
 
    </div> 
 
    </div> 
 
</body> 
 
</html>

以下是我的代碼..

https://codepen.io/iamrkcheers/pen/KqxyVZ

任何幫助表示讚賞。謝謝。

+2

你的代碼裏面如果條件是異步和外部是同步的,你應該只在回調函數內部提醒它 –

+0

我想要的是我的回調函數外的緯度和經度的值。如何實現這一目標? – iamrkcheers

+1

導致第二個彈出窗口不能等待函數 – Durga

回答

1

您的提醒存在錯誤的範圍。

if(navigator.geolocation){ 

    //navigator.geolocation.getCurrentPosition is an asynchronous function 
    //we do not know when it will be done 
    //but we can tell it what do do when it finished. 
    //this is why we pass it a function as parameter 

    navigator.geolocation.getCurrentPosition(
     //this here is your callback function : 
     function(position){ 
     latitude = position.coords.latitude; 
     longitude = position.coords.longitude; 
     alert(latitude + " " + longitude); // only here do we know what latitude and longitude are. 
     } 
    ); 

    //since we are not going to synchronously wait until the getCurrentPosition finishes 
    //any statement at this point gets executed immediately. 
    alert("hey!"); 
} 

如果你運行該代碼時,hey警報可能會彈出,然後再與座標警報。

+0

我想要的是我的回調函數外的緯度和經度值。如何實現這一目標? – iamrkcheers

+1

你已經有他們 –

+1

但請記住,緯度和經度將是空的,直到你的回調函數完成! –

1

這是因爲getCurrentPosition()的調用是異步的,它將結果傳遞給作爲自己的參數給出的函數中的position參數。外部的alert()在內部的alert()之前執行,即在值填充之前,外部警報用空值執行。

嘗試對外部警報使用.then(alert())的promise函數。