コールバック関数が呼び出されるのを待つ代わりに、googlemaps api を同期的に使用して何かをジオコーディングできるかどうか疑問に思っていました。値が返されるのを待ちます。誰かがこのようなことをする方法を見つけましたか?
PS: API のバージョン 3 を使用しています
コールバック関数が呼び出されるのを待つ代わりに、googlemaps api を同期的に使用して何かをジオコーディングできるかどうか疑問に思っていました。値が返されるのを待ちます。誰かがこのようなことをする方法を見つけましたか?
PS: API のバージョン 3 を使用しています
はい、同期要求は必要ありませんが、達成しようとしていることは可能です。
このコードを見てください
function StoreGeo()
{
var address = $('input[name=zipcode]').val() + ', ' + $('input[name=city]').val();
geocoder.geocode( { 'address': address}, function(results, status) {
if (status == google.maps.GeocoderStatus.OK) {
var ll = results[0].geometry.location.toString();
llarr = ll.replace(/[\(\) ]/g, '').split(',');
for(i = 0; i < llarr.length;i++)
{
$('#form').append($('<input type="hidden" name="'+(i == 0 ? 'lat' : 'long')+'">').val(llarr[i]));
}
$('#form').submit();
}
else
{
alert(status);
}
});
$('#form').unbind('submit');
return false;
}
$(document).ready(function () {
//init maps
geocoder = new google.maps.Geocoder();
$('#form').bind('submit',function() {
StoreGeo();
});
});
したがって、送信ハンドラーをフォームに添付します。送信時に、フォームのアドレス情報に基づいて地理的要求を実行します。しかし同時に、ハンドラーでfalseを返すことにより、送信を延期します。応答ハンドラーは、2つの非表示のテキストフィールド「lat」と「long」を作成し、応答を格納します。最後に、フォームは2つの新しいフィールドを含むクライアントスクリプトによって送信されます。サーバー側では、それらをDBに保存できます。
!! これは可能ですが、上記のように、おそらくグーグルの用語に反していることに注意してください。
ジオコーダーは、値を使用してコールバック関数を呼び出します。それがそれを行う唯一の方法です。同期している場合、Geocodeが処理されるのを待つ間、スクリプトはフリーズします。そのようにする理由は本当にありません。
正確に何を達成しようとしていますか?