11

コールバック関数が呼び出されるのを待つ代わりに、googlemaps api を同期的に使用して何かをジオコーディングできるかどうか疑問に思っていました。値が返されるのを待ちます。誰かがこのようなことをする方法を見つけましたか?

PS: API のバージョン 3 を使用しています

4

3 に答える 3

7

はい、同期要求は必要ありませんが、達成しようとしていることは可能です。

このコードを見てください

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に保存できます。

!! これは可能ですが、上記のように、おそらくグーグルの用語に反していることに注意してください。

于 2010-09-12T17:11:33.973 に答える
2

ジオコーダーは、値を使用してコールバック関数を呼び出します。それがそれを行う唯一の方法です。同期している場合、Geocodeが処理されるのを待つ間、スクリプトはフリーズします。そのようにする理由は本当にありません。

正確に何を達成しようとしていますか?

于 2009-08-21T05:44:54.590 に答える