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; }