[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。
前回の「Ajaxを使いPHPからデータを取得する方法」では例として郵便番号からの住所取得を挙げましたが、 それのデモ的なものを示したいと思います。
先ずは郵便番号のCSVファイルを以下のサイトからダウンロードする必要があります。
⇒郵便番号データダウンロード
今回はデモなので東京都のデータのみを利用しました。
HTML ファイル側のソースですが以下の様になります。
Ajax からの正常戻りの関数で、 PHPからのデータが住所1,住所2,住所3を配列にしたものを返してくるので、 分解してそれぞれの表示タグに設定しています。
■Ajaxを使いPHPからデータを取得するHTMLファイルその2
<html> <head> <meta charset="utf-8"> <title>test ajax</title> <script src="https://code.jquery.com/jquery-3.2.1.min.js"></script> <script type="text/javascript"> //Ajax関数 function getData() { // マスタデータの取得 $.ajax({ type: "POST" , url: "./ajax2.php" , data: { zip: $("#zip").val() } }).done(function(res){ // ajaxがOK // JSON形式から文字列に変換 var data = JSON.parse(res); // [,]で分解 var arr = (""+data).split(','); // 住所の表示 $("#addr1").text(arr[0]); $("#addr2").text(arr[1]); $("#addr3").text(arr[2]); }).fail(function() { // 取得エラー alert('取得エラー'); }).always(function() { // 後処理(処理することが在れば) }); return false; } </script> </head> <body> <h2>test ajax json 2</h2> 郵便番号("-"無し):<input type="text" id="zip" size="10" maxlength="7" /><br /> <p id="addr1">テスト住所1</p> <p id="addr2">テスト住所2</p> <p id="addr3">テスト住所3</p> <button onclick="getData();">Ajax</button> </body> </html>
外部PHPファイル ajax2.php 及び 13TOKYO.CSV がこのHTMLファイルと同じディレクトリに存在することにします。
■外部PHPファイル ajax2.php
<?php // 郵便番号CSVファイル読込、配列データで返す // (KEY:郵便番号 => array(住所1, 住所2, 住所3) ) function getZipCsv($filename) { // ZIPデータ配列 $arrZip = array(); // ファイルを開く $fp = fopen($filename, 'r'); // whileで行末までループ処理 while (!feof($fp)) { // fgetsでファイルを読み込み、変数に格納 $txt = fgets($fp); if ($txt == "") continue; // SJISからUTF8への文字コード変換 $txt = mb_convert_encoding($txt, 'UTF-8', 'sjis-win'); // ["]を省く $txt = str_replace('"', '', $txt); // [,]で配列に分解 $arr = explode(',', $txt); // 3カラム目をキーにして住所1, 住所2, 住所3を配列で退避 $arrZip[$arr[2]] = array($arr[6], $arr[7], $arr[8]); } // fcloseでファイルを閉じる fclose($fp); // 郵便番号配列データを返す return $arrZip; } // 郵便番号の取得 $zip = ""; if (isset($_POST["zip"]) == true && $_POST["zip"] != "") { $zip = $_POST["zip"]; } // 東京の郵便番号CSVファイルを変数に格納 $arrZipData = getZipCsv('./13TOKYO.CSV'); $arrRet = array( "", "", ""); if ($zip != "" && array_key_exists($zip, $arrZipData)) { // 郵便番号のキーが存在 $arrRet = $arrZipData[$zip]; } // 結果を返す echo(json_encode($arrRet));
このPHPファイルの関数 getZipCsv は指定されたCSVファイルをオープンし、 1行毎に読込を行い、SJISからUTF8への文字コード変換を行った後で 郵便番号をキーとした配列に住所データを格納しています。
POSTされた zip を取得し、その値をキーとして、郵便番号配列データから 該当データを取得し JSON データに変換して echo 関数で返してやります。
今回は東京都のデータしかありませんが、本当ならば全国のデータに対応する必要があります。 そのためにはこの様なCSVファイルを都度読込んで処理するには重すぎるので、 データベースに郵便番号マスタを作成して、そこから取得するのが一般的だと思います。
コメント