1

私はこのロジックを持っています:ユーザーはフォームで彼の住所を与えます、私はこの住所を取り、送信機能で私はこの住所の緯度と経度を取得し、これをフォームの非表示の入力フィールドに保存してから、それらでフォームを送信します緯度と経度の内側。

私のjs関数:

var geocoder = new google.maps.Geocoder();
function geocodeme(adr) {
    var address = adr;

    geocoder.geocode(
        {'address': address}, 
        function(results, status) {
            if (status == google.maps.GeocoderStatus.OK) {
                var latitude = results[0].geometry.location.lat();
                var longitude = results[0].geometry.location.lng();
                //alert(latitude + ' - ' + longitude);
                $('#lat').val(latitude);
                $('#long').val(longitude);
            } 
        }
    ); 
}

function submitme(){
    var adres = str + '+' + hnr + '+' + plz + '+' + stadt + '+' + land;
    var codemeadr = str + ' ' + hnr + ' ' + plz + ' ' + stadt + ' ' + land;         
    geocodeme(codemeadr);

    //document.addform.submit();
    alert($('#lat').val() + ' -- ' + $('#long').val());
}

私のフォーム:

....
<input type="hidden" name="lat" id="lat" />
<input type="hidden" name="long" id="long" />
<a href="javascript:submitme();"> Submit </a>

最初に送信をクリックすると、緯度と経度が空になります(設定されていません)が、2回目に送信すると設定されますが、これはなぜですか?最初の送信呼び出しで緯度と経度を設定できないのはなぜですか?

ところで:これらのパラメータstrはすべてhnr..実際に存在し、空ではありませんが、ここでは問題ではありません..

手伝ってくれてありがとう

4

2 に答える 2

2

geocoder.geocode非同期だからです。結果は、指定したコールバックで処理する必要があります。

この行は callback にある必要があります:

alert($('#lat').val() + ' -- ' + $('#long').val());

もちろん、この時点で入力した行は正しい値を使用できません。

于 2013-01-28T13:11:10.950 に答える
1

非同期コールバック。つまり、geocodeme を呼び出すとすぐに返されます。コールバック (function(results, status)) は、Google がリクエストに応答した後に呼び出されます。

...
            if (status == google.maps.GeocoderStatus.OK) {
                var latitude = results[0].geometry.location.lat();
                var longitude = results[0].geometry.location.lng();
                //alert(latitude + ' - ' + longitude);
                $('#lat').val(latitude);
                $('#long').val(longitude);
                document.addform.submit();
...
// call this function on button click not on submit
function submitme(){
    var adres = str + '+' + hnr + '+' + plz + '+' + stadt + '+' + land;
    var codemeadr = str + ' ' + hnr + ' ' + plz + ' ' + stadt + ' ' + land;         
    geocodeme(codemeadr);
// this function returns immediately, even when geocode is not retrieved yet.
    //document.addform.submit();
    alert($('#lat').val() + ' -- ' + $('#long').val());
}
于 2013-01-28T13:33:41.727 に答える