次のコードを機能させようとしています (console.log は、何が起こっているかを確認するためのものです)。関数の外でグローバル変数を宣言しましたが、関数内でのみ更新しているようです。
<script type="text/javascript">
var map;
var geocoder;
var address;
function initialize(){
geocoder = new google.maps.Geocoder();
var mapOptions = {
center:new google.maps.LatLng(-76.146294, 43.052081),
mapTypeId: google.maps.MapTypeId.ROADMAP,
zoom: 15,
streetViewControl: false
};
map = new google.maps.Map(document.getElementById("map_canvas"), mapOptions);
loadAddress();
console.log("initialize function: " + address); //this correctly returns the updated address
}
function loadAddress(){
var property = <?php echo json_encode(urlencode($Residential['ReAddress'])); ?>;
var zipCode = <?php echo json_encode($Residential['zipCode']); ?>;
address = property + "," + zipCode;
geocoder.geocode({'address': address}, function(result, status){
if(status === "OK"){
map.setCenter(result[0].geometry.location);
var marker = new google.maps.Marker({
map: map,
position: result[0].geometry.location
});
}
else {
alert("Failed to geocode: " + status);
}
});
}
google.maps.event.addDomListener(window, 'load', initialize);
</script>
上記は問題なく動作します。'address' 変数は適切に更新され、initialize() 関数の最後でコンソールにログを記録すると、適切に表示されます。問題は、同じ変数をページのさらに下のコンソールに記録しようとした場合です。
<script type="text/javascript">
console.log("further down page: " + address); //this comes back as 'undefined'
</script>
それをしようとすると、「未定義」になります。私はjavascriptを初めて使用しますが、変数が関数の外で宣言されている場合、それはグローバル変数であり、どこからでもアクセスできるはずであると理解していました。明らかな何かが欠けているように感じますが、何がわかりません (検索にかなりの時間を費やしました!)。
私の推測では、ページが読み込まれるまで initialize() が呼び出されないことに関係しているのですが、ページの読み込みが完了する前に「アドレス」がログに記録されようとしています。それが問題である場合、それを修正する方法がわかりません。
また、上記のコードは最善の方法ではないと確信していますが、これは実際にはより多くの学習経験です。ありがとう!