2016-09-13 24 views
1

APIを使用してローカル天気を表示しようとしています。 API urlは、ユーザーのローカル位置に応じて生成されます。jQuery関数の引数としてグローバル変数を使用できません

var lat,lon = null; 
var key = "mykey"; 
var api = ""; 

function setApi(position){ 
lat = Math.round(position.coords.latitude*1000)/1000; 
lon = Math.round(position.coords.longitude*1000)/1000; 

api = "http://api.openweathermap.org/data/2.5/weather?lat=" + lat + "&lon=" + lon + "&appid=" + key; 
} 


navigator.geolocation.getCurrentPosition(setApi); 

$.getJSON(api, function(data){ 
    console.log(data.sys.country); 
}); 

私は$ .getJSON関数の引数としての私のAPIグローバル変数を使用する場合、問題が起こって何もありません。代わりに文字列を使用すると動作します。例えば:

$.getJSON("http://api.openweathermap.org/data/2.5/weather?lat=46.295&lon=30.648&appid=%mykey%", function(data){ 
console.log(data.sys.country); 
}); 
+2

だから私は 'api'あなたはそれが呼び出し時と思われるものではないと言うでしょう。私はそれがまだ '' ''だと思います。たとえば、 'getCurrentPosition'が失敗しているかもしれません。(または、おそらく非同期です。私はそれに精通していません) – musefan

+0

' getCurrentPosition'は失敗していません。私はコンソールを介して私の** api ** varにアクセスすることができ、それは正しい価値があります。私は非同期が問題になると思います。ありがとう。 – Suntechnick

+0

'api'の値を設定した後に呼び出しを移動してみてください。もしそれがそれほど確実であれば、 – musefan

答えて

0

私はあなたが持っている問題は、$.getJSONを呼び出した時点で、実際のapi値がまだ""に設定されていることであると信じています。

これは、非同期操作がgetCurrentPositionで発生している可能性があります。これはsetApiコールバック関数の前に$.getJSONが有効に呼び出されていることを意味します。

私は、それはあなたの現在のコードに基づいて、最も簡単な解決策は自分のsetApi関数内$.getJSON呼び出しを移動することですあなたがapi値が正しく設定されている後にそれが唯一のと呼ばれていることを確認することができ、そのように示唆しています。例えば

var lat,lon = null; 
var key = "mykey"; 
var api = ""; 

function setApi(position){ 
    lat = Math.round(position.coords.latitude*1000)/1000; 
    lon = Math.round(position.coords.longitude*1000)/1000; 

    api = "http://api.openweathermap.org/data/2.5/weather?lat=" + lat + "&lon=" + lon + "&appid=" + key; 

    $.getJSON(api, function(data){ 
     console.log(data.sys.country); 
    }); 
} 

navigator.geolocation.getCurrentPosition(setApi); 
関連する問題