将localStorage数据转成JSON对象,需要调用JSON对象的parse()方法,JSON.parse(data)。其中data就是localStorage对象获取的数据,调用该方法将返回一个装载data数据的JSON对象。
通过stringify()方法,将一个实体对象转换为JSON格式的文本数据,JSON.stringify(obj)。obj表示任意一个实体对象,该方法返回一个由实体对象转成JSON格式的文本数据集。
下例所示:
function addStu(){
var sno=$$("sno").value,
name=$$("name").value,
sex=$$("sex").value,
score=$$("score").value
//声明一个实体对象,将学生的信息当作对象的成员
var
dataSet=new Object
dataSet.sno=sno
dataSet.name=name
dataSet.sex=sex
dataSet.score=score
//把dataSet这个对象转换成JSON格式的文本数据
var
list=JSON.stringify(dataSet)
localStorage.setItem(sno,list)
getlocalData()
}
function getlocalData(){
var addInfo=""
for(var i=0i
var key=localStorage.key(i)
//把json格式的字符串转换成JSON对象
var
dataSet=JSON.parse(localStorage.getItem(key))
addInfo+="
"+dataSet.sno
+""+dataSet.name
+""+dataSet.sex
+""+dataSet.score
+""
$$("allInfo").innerHTML=addInfo
}
}
定位功能(Geolocation)是HTML5的新特性,因此只有在支持HTML5的现代浏览器上运行,特别是手持设备如iphone,地理定位更加精确。首先我们要检测用户设备浏览器是否支持地理定位,如果支持则获取地理信息。注意这个特性可能侵犯用户的隐私,除非用户同意,否则用户位置信息是不可用的,所以我们在访问该应用时会提示是否允许地理定位,我们当然选择允许即可。function getLocation(){
if (navigator.geolocation){
navigator.geolocation.getCurrentPosition(showPosition,showError)
}else{
alert("浏览器不支持地理定位。")
}
}
上面的代码可以知道,如果用户设备支持地理定位,则运行 getCurrentPosition() 方法。如果getCurrentPosition()运行成功,则向参数showPosition中规定的函数返回一个coordinates对象,getCurrentPosition() 方法的第二个参数showError用于处理错误,它规定当获取用户位置失败时运行的函数。
我们先来看函数showError(),它规定获取用户地理位置失败时的一些错误代码处理方式:
function showError(error){
switch(error.code) {
case error.PERMISSION_DENIED:
alert("定位失败,用户拒绝请求地理定位")
break
case error.POSITION_UNAVAILABLE:
alert("定位失败,位置信息是不可用")
break
case error.TIMEOUT:
alert("定位失败,请求获取用户位置超时")
break
case error.UNKNOWN_ERROR:
alert("定位失败,定位系统失效")
break
}
}
我们再来看函数showPosition(),调用coords的latitude和longitude即可获取到用户的纬度和经度。
function showPosition(position){
var lat = position.coords.latitude//纬度
var lag = position.coords.longitude//经度
alert('纬度:'+lat+',经度:'+lag)
}
利用百度地图和谷歌地图接口获取用户地址
上面我们了解了HTML5的Geolocation可以获取用户的经纬度,那么我们要做的是需要把抽象的经纬度转成可读的有意义的真正的用户地理位置信息。幸运的是百度地图和谷歌地图等提供了这方面的接口,我们只需要将HTML5获取到的经纬度信息传给地图接口,则会返回用户所在的地理位置,包括省市区信息,甚至有街道、门牌号等详细的地理位置信息。
我们首先在页面定义要展示地理位置的div,分别定义id#baidu_geo和id#google_geo。我们只需修改关键函数showPosition()。先来看百度地图接口交互,我们将经纬度信息通过Ajax方式发送给百度地图接口,接口会返回相应的省市区街道信息。百度地图接口返回的是一串JSON数据,我们可以根据需求将需要的信息展示给div#baidu_geo。注意这里用到了jQuery库,需要先加载jQuery库文件。
Geolocation接口不可以获取手机的gps定位,这个api具有自己特有的定位方式。定位用户的位置
HTML5 Geolocation API 用于获得用户的地理位置。
鉴于该特性可能侵犯用户的隐私,除非用户同意,否则用户位置信息是不可用的。
用法如下:
<!DOCTYPE html>
<html>
<body>
<p id="demo">点击这个按钮,获得您的位置:</p>
<button onclick="getLocation()">试一下</button>
<div id="mapholder"></div>
<script src="http://maps.google.com/maps/api/js?sensor=false"></script>
<script>
var x=document.getElementById("demo")
function getLocation()
{
if (navigator.geolocation)
{
navigator.geolocation.getCurrentPosition(showPosition,showError)
}
else{x.innerHTML="Geolocation is not supported by this browser."}
}
function showPosition(position)
{
lat=position.coords.latitude
lon=position.coords.longitude
latlon=new google.maps.LatLng(lat, lon)
mapholder=document.getElementById('mapholder')
mapholder.style.height='250px'
mapholder.style.width='500px'
var myOptions={
center:latlon,zoom:14,
mapTypeId:google.maps.MapTypeId.ROADMAP,
mapTypeControl:false,
navigationControlOptions:{style:google.maps.NavigationControlStyle.SMALL}
}
var map=new google.maps.Map(document.getElementById("mapholder"),myOptions)
var marker=new google.maps.Marker({position:latlon,map:map,title:"You are here!"})
}
function showError(error)
{
switch(error.code)
{
case error.PERMISSION_DENIED:
x.innerHTML="User denied the request for Geolocation."
break
case error.POSITION_UNAVAILABLE:
x.innerHTML="Location information is unavailable."
break
case error.TIMEOUT:
x.innerHTML="The request to get user location timed out."
break
case error.UNKNOWN_ERROR:
x.innerHTML="An unknown error occurred."
break
}
}
</script>
</body>
</html>