検索
連載

AjaxのバックエンドにPHP+MySQL今から始める MySQL入門(10)(2/3 ページ)

Share
Tweet
LINE
Hatena

サンプルファイルで理解するAjaxの動作(2)

 sample6で使用するファイルは下記のとおりで、フロントエンド部とバックエンド部で構成されています。フロントエンドはHTMLとJavaScriptで作成し、バックエンドはPHPとMySQLで作成します。

 なお本サンプルでは、前回までに紹介したDTO・DAOパターンは使用していません。簡素化のため、データベースアクセスに関連する操作は1つのPHPファイルに集約しています。

*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***

JavaScriptとXMLで連携

 フロントエンドでは、複雑化したJavaScriptを外部ファイルとしてHTMLファイルから読み込むようにしています。郵便番号テキストボックスへの入力をトリガーに、JavaScriptでURL「backend.php?zip_code=郵便番号」を作成し、サーバへの問い合わせを実行します。

 問い合わせを受けたバックエンドでは、郵便番号を前方一致で検索し、該当があれば住所データと該当件数、それにステータス「ok」を付加したものをXMLで出力し、フロントエンドに送り返します。該当するものがなければ「該当なし」というメッセージに、ステータス「ng」を付加したものをXMLでフロントエンドに送り返します。

 ここでは前方一致検索を用いているため、最初の1文字だけで検索を実行できます。そのため該当データも複数件に及ぶため、フロントエンドには該当件数と最初1件目の住所データだけを送り返します。

 バックエンドからの返信を受けたフロントエンドは、XMLを解析し、ステータス/住所データ/バックエンドからのメッセージを取り出し、各テキストボックスやテキストエリアにデータを当てはめます。

図1 サンプルの基本動作
図1 サンプルの基本動作

バックエンド(backend.php)の処理

 バックエンドでは、受け取った郵便番号を基に、zip_addressテーブルに対し「SELECT * FROM zip_address WHERE zip like '$zip_code%'」のような前方一致検索を実行します(12行目)。実行結果から該当件数を拾い出し(13行目)、該当があれば最初の1件だけを抜き出します。抜き出したデータは、この後定義するsendOk()関数を使ってXMLに整形します(14〜16行目)。

 該当するものがない場合は、この後定義するsendNa()関数を使ってXML出力を行います(17〜19行目)。backend.phpではDAOパターンを踏襲していないため、MySQLサーバ接続(4〜8行目)や切断(24、25行目)の処理を直接盛り込む必要があります。

*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***

 フロントエンドに該当住所データを送り返す際には、ユーザー定義関数「sendOk()」を使用します。sendOk()は住所と該当件数を引数に、okステータスとともに引数の値をXMLの要素に変換し、出力します。

*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***

 フロントエンドに該当データがないことを通知する際やデータベース処理にエラーが発生した際には、ユーザー定義関数「sendNa()」を使って、naステータスとともに引数で渡されたメッセージ内容をXMLの要素に変換し、出力します。

*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***

 ブラウザのアドレス欄に「http://HTTPDサーバ/sample6/backend.php?zip_code=郵便番号」のようなURLを入力することで、バックエンドだけで動作を確認することができます。ここで表示されるXMLおよび各要素を確認しておきます。

画面2 該当データがある場合のXML
画面2 該当データがある場合のXML
画面3 該当データがない場合のXML
画面3 該当データがない場合のXML

Copyright © ITmedia, Inc. All Rights Reserved.

ページトップに戻る