プロが教える店舗&オフィスのセキュリティ対策術

現在地の座標を取得するために下記のようにしています。
「var」をつけなければグローバル変数になるようなので関数外に宣言していますが
結果はundefinedになります。

PHPでいうところのセッションのように関数をまたいで変数を使いたいのですが
どうすればいいのでしょうか?


myLatlng = 'ダミー';

function loadXml( url )
{
$.ajax({
url: url,
type: 'GET',
dataType: 'xml',
timeout: 5000,
}).done(function( xml ){
myLatLng = geoLocate();
alert(myLatLng);//undefined
parseXml( xml );
}).fail(function( xml ){
alert( '読み込みに失敗しました' );
});

}

function geoLocate()
{

var position_options = {
enableHightAccuracy: true
};

navigator.geolocation.watchPosition( success, fatal, position_options );

function success( position )
{
return new google.maps.LatLng( position.coords.latitude, position.coords.longitude );
}
function fatal( error )
{
alert( '位置情報の取得に失敗しました' );
return null;
}

}

A 回答 (3件)

私もやってみましたが、return ではダメなようです。


 →Javascriptについては、自分も素人ですが
以下のコードでGoogle Map が表示できますので、
基本的な構成を変えてみた方が良いと思います。
----------------------------------
<!DOCTYPE html>
<html><head><title>現在地取得</title>
<script type="text/javascript" src="http://maps.google.com/maps/api/js?sensor=true"> …
<script type="text/javascript">

var options;
var position_options;
var map;

function geoLocate(){

position_options = {
enableHightAccuracy: true
};

navigator.geolocation.watchPosition(success, fatal, position_options);

function success(position){
alert('位置情報の取得に成功しました');
options = {
zoom: 15,
center: new google.maps.LatLng( position.coords.latitude, position.coords.longitude ),
mapTypeId: google.maps.MapTypeId.ROADMAP
};

map = new google.maps.Map(document.getElementById('canvas'), options);
}

function fatal(error){
alert('位置情報の取得に失敗しました');
}

}

</script></head>

<body onload="geoLocate()">
<div id="canvas" style="width: 480px; height: 480px;"></div>
</body></html>
    • good
    • 0
この回答へのお礼

試してまでいただきありがとうございます!

>return ではダメなようです。
やはりそうですか・・・住所から座標を取得するソースも書いてみましたが
こちらもreturnすることができずで調べてみてもはっきりした回答がなく
モヤモヤしていました^^;

APIの仕様のようなのでこればっかりは諦めるしかないですね。
できるだけ関数でわけたかったのですが、基本構造から見直ししてみます。

お礼日時:2013/11/06 23:40

>myLatLng = geoLocate();


>alert(myLatLng);//undefined

あくまでこの部分だけへの提案ですが、
geoLocate関数が何も返していないようですので、適切な値を返すようにしてみてください。

この回答への補足

取得した値をそのまま使っている例は多数あるのですが、returnしている例が
見つからずどうしていいものかわからず困っております。

どのように書けばいいか具体的に教えていただけないでしょうか?

補足日時:2013/11/06 21:09
    • good
    • 0

ん?



普通に var をつけてグローバル変数になりませんか?
私は勘違いしているのかな…。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!