【问题标题】:HTML5 Geolocation data loaded in a form to send towards databaseHTML5 地理位置数据加载到表单中以发送到数据库
【发布时间】:2012-03-30 08:24:42
【问题描述】:

我正忙于一个学校项目,我必须构建一个网络应用程序。我想使用的一项功能是谷歌地图和 HTML5 地理位置,以查明移动用户的位置。

我在http://merged.ca/iphone/html5-geolocation 上找到了这个 HTML5 地理位置功能,对我来说效果很好。但是,我希望将地址数据放入表单中,以便在移动用户 Geo 找到他的位置时将其提交到我的数据库。这会导致标记被保存并且可以在全球网站上查看。

谁知道如何将“您的地址:”数据加载到表单的输入字段中? 您可以在下面找到我的 Html 文件。也许有人有更好的建议?

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

<title>HTML 5 Geolocation</title>

<style>
#map {
    height:300px;
    width:300px;
}

</style>    
<script type="text/javascript" src="http://www.google.com/jsapi"></script>
<script type="text/javascript">google.load("jquery", "1"); google.load("jqueryui", "1");</script>

<script src="http://maps.google.com/maps?file=api&amp;v=2&amp;sensor=false&amp;key=ABQIAAAAiUzO1s6QWHuyzxx-JVN7ABSUL8-Cfeleqd6F6deqY-Cw1iTxhxQkovZkaxsxgKCdn1OCYaq7Ubz3SQ" type="text/javascript"></script>
<script type="text/javascript" src="http://api.maps.yahoo.com/ajaxymap?v=3.8&appid=n2wY9mzV34Hsdslq6TJoeoJDLmAfzeBamSwJX7jBGLnjM7oDX7fU.Oe91KwUbOwqzvc-"></script>
<script type="text/javascript">

// Geolocation with HTML 5 and Google Maps API based on example from maxheapsize: http://maxheapsize.com/2009/04/11/getting-the-browsers-geolocation-with-html-5/
//
// This script is by Merge Database and Design, http://merged.ca/ -- if you use some, all, or any of this code, please offer a return link.

var map;
var mapCenter
var geocoder;
var fakeLatitude;
var fakeLongitude;

function initialize() 
{   

    if (navigator.geolocation) 
    {
        navigator.geolocation.getCurrentPosition( function (position) {  

            // Did we get the position correctly?
            // alert (position.coords.latitude);

            // To see everything available in the position.coords array:
            // for (key in position.coords) {alert(key)}

            mapServiceProvider(position.coords.latitude,position.coords.longitude);

        }, // next function is the error callback
            function (error)
            {
                switch(error.code) 
                {
                    case error.TIMEOUT:
                        alert ('Timeout');
                        break;
                    case error.POSITION_UNAVAILABLE:
                        alert ('Position unavailable');
                        break;
                    case error.PERMISSION_DENIED:
                        alert ('Permission denied');
                        break;
                    case error.UNKNOWN_ERROR:
                        alert ('Unknown error');
                        break;
                }
            }
        );
    } 
    else 
    {
      alert("I'm sorry, but geolocation services are not supported by your browser or you do not have a GPS device in your computer. I will use a sample location to produce the map instead.");

      fakeLatitude = 49.273677;
      fakeLongitude = -123.114420;

      //alert(fakeLatitude+', '+fakeLongitude);   
      mapServiceProvider(fakeLatitude,fakeLongitude);
    }  
}

function mapServiceProvider(latitude,longitude)
{
    if (window.location.querystring['serviceProvider']=='Yahoo')
    {
        mapThisYahoo(latitude,longitude);
    }
    else
    {
        mapThisGoogle(latitude,longitude);
    }
}

function mapThisYahoo(latitude,longitude)
{
    var map = new YMap(document.getElementById('map'));  
    map.addTypeControl();   
    map.setMapType(YAHOO_MAP_REG);  
    map.drawZoomAndCenter(latitude+','+longitude, 3);

    // add marker
    var currentGeoPoint = new YGeoPoint( latitude, longitude );  
    map.addMarker(currentGeoPoint);

    // Start up a new reverse geocoder for addresses?
    // YAHOO Ajax/JS/Rest API does not yet support reverse geocoding (though they do support it via Actionscript... lame)
    // So we'll have to use Google for the reverse geocoding anyway, though I've left this part of the script just in case Yahoo! does support it and I'm not aware of it yet
    geocoder = new GClientGeocoder();
    geocoder.getLocations(latitude+','+longitude, addAddressToMap);
}

function mapThisGoogle(latitude,longitude)
{
    var mapCenter = new GLatLng(latitude,longitude);
    map = new GMap2(document.getElementById("map"));
    map.setCenter(mapCenter, 15);
    map.addOverlay(new GMarker(mapCenter));

    // Start up a new reverse geocoder for addresses?
    geocoder = new GClientGeocoder();
    geocoder.getLocations(latitude+','+longitude, addAddressToMap);
}

function addAddressToMap(response)
{
    if (!response || response.Status.code != 200) {
        alert("Sorry, we were unable to geocode that address");
    } else {
        place = response.Placemark[0];
        $('#address').html('Your address: '+place.address);
    }
}

window.location.querystring = (function() {

    // by Chris O'Brien, prettycode.org
    var collection = {};
    var querystring = window.location.search;
    if (!querystring) {
        return { toString: function() { return ""; } };
    }
    querystring = decodeURI(querystring.substring(1));

    var pairs = querystring.split("&");

    for (var i = 0; i < pairs.length; i++) {

        if (!pairs[i]) {
            continue;
        }
        var seperatorPosition = pairs[i].indexOf("=");

        if (seperatorPosition == -1) {
            collection[pairs[i]] = "";
        }
        else {
            collection[pairs[i].substring(0, seperatorPosition)] 
                = pairs[i].substr(seperatorPosition + 1);
        }
    }

    collection.toString = function() {
        return "?" + querystring;
    };

    return collection;
})();
</script>

</head>
<body onLoad="initialize()">
<div id="content">
<div id="map"></div>
<p id="address"></p>

<form id="ContactForm" action="">
                            <p>
                                <label>Topic</label>
                                    <input id="event" name="event" maxlength="120" type="text" autocomplete="off"/>
                            </p>
                            <p>
                                <label>Address</label>
                                    <input id="address" name="address" maxlength="120" type="text" autocomplete="off"/>
                            </p>
                            <input id="send" type="button" value="Send"/>
                            <input id="newcontact" name="newcontact" type="hidden" value="1"></input>
                        </form>
</div>
</body>
</html>

【问题讨论】:

    标签: forms html google-maps web-applications geolocation


    【解决方案1】:

    你必须使用JavaScript来设置地址输入字段的值,这样

    1- 将名称属性添加到表单并输入。

    2-document.formName.inputName.value=place.address;

    祝你好运

    【讨论】:

    • 您好 Hesham,我需要将该行代码放在我的 html 文件中的什么位置?谢谢
    • $('#address').html('你的地址:'+place.address);在这一行下(当然在 javascript 代码中)
    • 我把这行放在了 javascript 中并且输入已经使用了 id="address" 但是它没有将数据加载到输入字段中,我错过了什么吗?
    • 这需要反复试验,尝试删除表单 [0] 并测试,如果仍然无法正常工作,请为表单和输入添加名称属性并尝试 document.formname.inputname.value=place.address,如果还是不行告诉我你用的是哪个浏览器?
    • 我正在使用最新的 Mac 版 Firefox。我试图删除表单[0],但没有奏效。另一条线也不起作用。有什么建议吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-20
    • 1970-01-01
    • 1970-01-01
    • 2012-04-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多