住所入力
郵便番号をハイフンを含めて8桁入力すると、自動的に住所が表示されます。
(手順)
(1)onKeyUpイベントを検知するたびに入力文字数を検査する。
(2)所定の文字数になったらPHPスクリプトに通信して、該当の住所を得る。
(3)PHPスクリプトでは、データベースより該当住所を検索する。(現状では数件しか入っていません。)
function tryAjax(){
if ($F("postcode").length == 8){
uri = "zip.php";
data = Form.serialize("form01");
options = {method: "post",
parameters: data,
onComplete:ajaxRequest};
new Ajax.Request(uri, options);
}
}
function ajaxRequest(myRequest){
$("addr").value = myRequest.responseText;
}
郵便番号から入力してください。例:112-0001〜6,112-0011〜15
PHPファイル
◎Ajaxで使用する文字コードはUTF8ですので、サーバもデータベースもUTF8に揃えていれば文字化けの心配はありません。
当サイトではサーバ、DBともにEUC-JPですので、スクリプト内でUTF8に変換しています。
(PHPスクリプトはUTF8で記述)
・サーバ側の変換:mb_internal_encoding("UTF-8");
・DB値の変換:$db = mb_convert_encoding($row['adr'], 'UTF-8', 'EUC-JP');
(注)mb_convert_encodingの引数には、DB値を直接指定します。
$db = $row['adr'];
$db = mb_convert_encoding($db, 'UTF-8', 'EUC-JP');
のように一旦変数に代入すると、代入した時点で文字化けしてしまうようです。
<?php
define("HOST","localhost");
define("DBNAME","testDB");
define("USER","user");
define("PASS","pass");
// 内部コードをUTF8にする
mb_internal_encoding("UTF-8");
$BOM = "\xef\xbb\xbf";
$hcode = $_POST["postcode"];
$acode = split("-", $hcode);
$code = $acode[0].$acode[1];
$conn = mysql_connect(HOST, USER, PASS) or die("接続エラー");
mysql_select_db(DBNAME, $conn);
$res = mysql_query("SELECT * FROM zip WHERE code = $code", $conn);
$row = mysql_fetch_array($res, MYSQL_ASSOC);
// DBの値をUTF8に変換する
$db = mb_convert_encoding($row['adr'], 'UTF-8', 'EUC-JP');
echo $BOM.$db;
mysql_close($conn);
?>
<参考>ボタン押下で通信
数万件のデータ検索など、トラフィックの状況によって通信に遅れが生じる場合は、ボタン押下による通信にした方が良いでしょう。
function tryAjax(){
uri = "zip.php";
data = Form.serialize("form01");
options = {method: "post",
parameters: data,
onComplete:ajaxRequest};
new Ajax.Request(uri, options);
}
function ajaxRequest(myRequest){
$("addr").value = myRequest.responseText;
}
郵便番号から入力してください。例:112-0001〜6,112-0011〜15