一种选择是使用从邮政编码返回位置的 geonames Web 服务。下面是一个快速示例,说明如何将 Web 服务与 dojo 一起使用。
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title></title>
<link rel="stylesheet" type="text/css" href="layout.css">
<script type="text/javascript">var djConfig = { parseOnLoad: true }</script>
<script type="text/javascript" src="../dojo-release-1.3.0/dojo/dojo.js"></script>
</script>
<script type="text/javascript">
dojo.require("dojo.io.script");
function getPlace() {
var zip = dojo.byId('zipcode').value;
console.log('zip is ', zip);
//use country code to get results for a specific country
//var gn_url = 'http://ws.geonames.org/postalCodeLookupJSON?postalcode=' + zip + '&country=US';
var gn_url = 'http://ws.geonames.org/postalCodeLookupJSON?postalcode=' + zip;
console.log(gn_url);
dojo.io.script.get({
url: gn_url,
callbackParamName: "callback",
load:function(response, io) {
console.log('got json.');
console.dir(response);
places = response.postalcodes;
var infos = []
dojo.forEach(places, function(p, i) {
infos[i] = p.placeName + ', ' + p.adminName1 + ', Lat: ' + p.lat + '; Long: ' + p.lng + '<br />';
});
dojo.byId('postalCode').innerHTML = infos.join('');
},
error:errorCb
});
}
function errorCb(type, data, evt){
debug(data);
}
</script>
</head>
<body class="tundra">
Enter a zip code: <input id="zipcode" type="text" /> <button onclick="getPlace(); return false;" value="Find Place.">Find Place.</button>
<div>Places:</div><div id="postalCode"></div>
</body>
</html>