2012-05-07 3 views
0

map.jsファイルにgetNameOfCity()という関数があります。これは、以下のようにしてactions.jsファイルから呼び出されます。var city = getNameOfCity();それは未定義と言います。ここで ジオコーダーが都市の値を返さない

がmap.js警告される私は正しい街を返す直前に、私は警告value.long_name
function getNameOfCity() { 
    geocoder.geocode({'latLng': map.getCenter()}, function(results, status) { 
     if (status == google.maps.GeocoderStatus.OK) { 
      if (results[0]){ 
       jQuery.each(results[0].address_components, function(key, value){ 
        if(value.types[0] == 'locality') { 
         return value.long_name; 
        } 
       }); 
      } 
     } else { 
      return false; 
     } 
    }); 
} 

内の関数です。しかし、私は関数が呼ばれた場所から戻って都市に警告するとき、それは未定義を返します。なぜどんなアイディアですか?

おかげ

+0

値を返す都市として.long_name?私は地図で作業していません...しかし、あなたがそれを返そうとするなら、私は問題がどこにあるのかを知っています –

+0

ジオコーダーはvalue.long_nameに都市の名前を入れます。私は結果を返すようにしたい "ロンドン"関数に戻るので、私はテストのような関数を呼び出す場合getNameOfCity();テストには値 "London"が含まれています –

答えて

0

アダムは言ったように、問題はあなたが無名関数に戻ることです。代わりに、次の操作を行います。

function getNameOfCity() { 
    var city = ''; 
    geocoder.geocode({'latLng': map.getCenter()}, function(results, status) { 
     if (status == google.maps.GeocoderStatus.OK) { 
      if (results[0]){ 
       jQuery.each(results[0].address_components, function(key, value){ 
        if(value.types[0] == 'locality') { 
         city = value.long_name; 
        } 
       }); 
       return city; 
      } 
     } else { 
      return false; 
     } 
    }); 
} 

UPDATE コールバック方法は、あなたが示唆したよう...あなたは今、都市名を取得するには、この機能を使用することができます2

function getNameOfCity(callback) { 
    geocoder.geocode({'latLng': map.getCenter()}, function(results, status) { 
     if (status == google.maps.GeocoderStatus.OK) { 
      if (results[0]){ 
       jQuery.each(results[0].address_components, function(key, value){ 
        if(value.types[0] == 'locality') { 
         callback(value.long_name); // call the function, pass the city name. 
        } 
       }); 
      } 
     } else { 
      callback(false); // not found? pass false instead. 
     } 
    }); 
} 

UPDATEこの方法:

getNameOfCity(function(city) { 
    alert(city); // or do something less useless. 
}); 
+0

この例をありがとう。私は上記のコードをコピーして貼り付けたが、それでも未定義を返す。 –

+0

未定義: -/ –

+0

他のアイデアはありますか?多くの人を見回すと、コールバック(市)を使うことを提案します。どうすればいい? –

1

あなたは匿名関数内で値を返している - ので、あなたは何に戻しています。

あなたがしなければならないことは、応答が返されたときに関数が呼び出され、「完了しました、ここに都市名があります」ということです。

+0

ああ、私は今それを参照しています:-)どのようにするには、上記の関数を変更しますか?気づいてくれてありがとう –

関連する問題