Ajax を使った郵便番号検索です.
日本郵政公社提供の郵便番号データを,SQLite を使って,検索しています.
Guide to Using XMLHttpRequest を思いっきり参考にしています (というかそのまま).
郵便番号は,ハイフン (-) を抜いた,7 文字を入れてください.
JavaScript & DHTMLクックブック - Webエキスパート必携テクニック集
ダニー グッドマン (著), Danny Goodman (原著), 村上 列 (翻訳)
オライリー・ジャパン (2004/01)
ISBN: 4873111749
4,830 円
入門 Ajax
高橋 登史朗 (著)
ソフトバンククリエイティブ (2005/11/15)
ISBN: 4797332646
2,499 円
function handleHttpResponse() {
if (xmlHttp.readyState == 4 && xmlHttp.status == 200) {
var xmlDoc = xmlHttp.responseXML;
if (xmlDoc.documentElement) {
var pref = xmlDoc.getElementsByTagName('pref').item(0).firstChild;
var city = xmlDoc.getElementsByTagName('city').item(0).firstChild;
var ville = xmlDoc.getElementsByTagName('ville').item(0).firstChild;
var company = xmlDoc.getElementsByTagName('company').item(0).firstChild;
if (pref != null) document.getElementById('pref').value = pref.data;
if (city != null) document.getElementById('city').value = city.data;
if (ville != null) document.getElementById('ville').value = ville.data;
if (company != null) document.getElementById('company').value = company.data;
} else {
document.getElementById('pref').value = '';
document.getElementById('city').value = '';
document.getElementById('ville').value = '';
document.getElementById('company').value = '';
}
}
}
function getAddrss() {
var zip = document.getElementById('zip').value;
xmlHttp.open('GET', 'ajaxzip.cgi?z=' + escape(zip), true);
xmlHttp.onreadystatechange = handleHttpResponse;
xmlHttp.send(null);
}
function getXmlHttpObject() {
var xmlhttp;
/*@cc_on
@if (@_jscript_version >= 5)
try {
xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
} catch (e) {
try {
xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
} catch (E) {
xmlhttp = false;
}
}
@else
xmlhttp = false;
@end @*/
if (!xmlhttp && typeof XMLHttpRequest != 'undefined') {
try {
xmlhttp = new XMLHttpRequest();
xmlhttp.overrideMimeType("text/xml");
} catch (e) {
xmlhttp = false;
}
}
return xmlhttp;
}
var xmlHttp = getXmlHttpObject();
#!/usr/bin/perl
use strict;
use DBI;
use CGI;
my $db = 'ajaxzip.db';
my $q = new CGI;
my $zip = $q->param('z');
print_result() if ($zip eq "");
my $dbh = DBI->connect("dbi:SQLite:dbname=${db}", '', '') or print_result();
my $sth = $dbh->prepare('SELECT * FROM postal WHERE code LIKE ?') or print_result();
$sth->execute("$zip%") or print_result();
my @row = $sth->fetchrow_array();
print_result() if $sth->err;
$sth->finish();
$dbh->disconnect();
print_result($row[1], $row[2], $row[3], $row[4]);
sub print_result {
my ($pref, $city, $ville, $company) = @_;
print "Content-Type: text/xml\n\n";
if ($pref ne '' || $city ne '' || $ville ne '' || $company ne '') {
printf('<?xml version="1.0" standalone="yes"?><zip><pref>%s</pref><city>%s</city><ville>%s</ville><company>%s</company></zip>',
$pref, $city, $ville, $company);
}
exit;
}