0

フォームに次のような送信ボタンがあります。

<input type="submit" name="add_submit" onclick="return getCoord()" value="Add Location" />

次のような 2 つの非表示の入力フィールド:

<input id="long" name="long" type="hidden"  value=""  />
<input id="lat" name="lat" type="hidden"  value="" />

スクリプトは次のようになります。

<script type="text/javascript">
    function getCoord() {

        address = document.getElementById('street').value + " " + document.getElementById('city').value + " " + document.getElementById('state').value + " " + document.getElementById('zip').value;
        console.log(address);
        var geocoder = new google.maps.Geocoder();

        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();

                document.getElementById('lat').value = latitude;
                document.getElementById('long').value = longitude;


            } 
        });

    } 
</script>

php投稿で:

        $new_long = $database -> escape_value($_POST['long']);
        $new_lat = $database -> escape_value($_POST['lat']);

フォームが送信される前に、JS 関数がlongおよびフィールドの値を入力するようにします。lat次に、php投稿で入力フィールドを取得したいのですが、空白が返されます。タイプミスはロジックの問題ですか?

注: アドレスが JS コンソールに正しく記録されていることを確認しました。

編集:実際にはDBクエリの失敗エラーが発生していますが、その結果は空白の long latエントリであると思われます。これらの座標は DB に入れられています。

4

1 に答える 1

1

Google API マップは非同期であるため、終了する前にフォームを送信します。サーバー上で行うか、オブザーバーで試してください。

編集

var geoCompleted = false;

function getCoord() {

    address = document.getElementById('street').value + " " + document.getElementById('city').value + " " + document.getElementById('state').value + " " + document.getElementById('zip').value;
    console.log(address);
    var geocoder = new google.maps.Geocoder();

    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();

            document.getElementById('lat').value = latitude;
            document.getElementById('long').value = longitude;
            geoCompleted = true
            $('#form-id').submit();

        } 
    });
   return geoCompleted
} 
于 2013-08-05T21:11:08.303 に答える