[PHP]JavaScriptとの連携






トップページへ

このサンプルプログラムは「JavaScriptからPHP(楽天市場で探すamazonで探す)を呼び出す方法を現役エンジニアが解説【初心者向け】」を参考にさせて頂きました。この場ですが謝辞を述べさせて頂きます。

 

※動作確認はしておりますが、参考にされる場合は自己責任でお願いします。

 

処理の流れ

1.メインプログラム内のリストボックスで番号を選ぶ。

2. 検索ボタンをクリックすると、選んだ番号が送信されサブプログラムが実行される。

3. メインプログラムのテーブルにその結果を表示する。

 

実行のイメージ画像

※このサンプルでは実際のリストボックスは1つです。

 

説明

1.メインプログラム「js-test.php」のソース

メインプログラムで選んだ番号をサブプログラムへ送信します。

<HTML>
<title></title>
<body>
<div align="center">
<form method="GET" name="f_main">
<select size="1" name="c_no">
<option>1</option>
<option>2</option>
<option>3</option>
<option>4</option>
<option>5</option>
</select>
<script>
<!--
function c_seek(){

var w_url = './js-test-data.php?str=' + document.f_main.c_no.value;

var request = new XMLHttpRequest();
request.open('GET', w_url, true);
request.responseType = 'json';

request.addEventListener('load', function (response) {
var data = <?="this.response"?>;
document.getElementById("no").innerHTML = data.no;
document.getElementById("country").innerHTML = data.country;
});

request.send();
}
//-->
</script>
<input type="button" value="検索" onclick="c_seek()">
</form>
<table border="1">
<tr><td>No.</td><td id="no">-</td></tr>
<tr><td>国名</td><td id="country">-</div></tr>
</table>
<br>
</div>
</body>
</HTML>

 

2.サブプログラム「js-test-data.php」のソース

送信されたデータを取得し、switch文に異なる結果を配列に代入。その配列をメインプログラムに返します。

 
<?php
if(isset($_GET['str'])) {
$str = $_GET['str'];

Switch ($str) {
case 1:
  $array = array("no" => 1, "country" => 'Japan');
  break;
case 3:
  $array = array("no" => 3, "country" => 'America');
  break;
case 5:
  $array = array("no" => 5, "country" => 'Taiwan');
  break;
default:
  $array = array("no" => 0, "country" => '不明');
}

echo json_encode($array);
unset($array);
}
?>

定義済み変数 $_GET については公式をご覧下さい。

関数issetは「変数(パラメータ)が正しく入っているかの検査です」(公式

JSON(JavaScript Object Notation)形式で戻すJSON関数については公式をご覧下さい。

関数unsetは「変数の割り当て解除です」(公式)※ここでのunsetは不要ですが学習のために使用しました。

 

3. ※1のソースから抜粋しています。

2で返されたデータ(データ構造体)を項目ごとに定義し、それらをテーブルの各項目にセットします

    var data = <?="this.response"?>;
    document.getElementById("no").innerHTML = data.no;
    document.getElementById("country").innerHTML = data.country;
});

  request.send();
}
//-->
</script>
<input type="button" value="検索" onclick="c_seek()">
</form>
<table border="1">
<tr><td>No.</td><td id="no">-</td></tr>
<tr><td>国名</td><td id="country">-</div></tr>
</table>

getElementByIdは「HTMLソース内の各項目にアクセスするための名前付け」です(詳細

 

サブプログラム内で

“no” => 1

“country” => ‘Japan’

といった値が配列としてセットされているので、受け取る側も

data.no

data.country

と同じ固有名で受け取っています。(同じ名前で再定義)

※データ構造体の中身は「noとcountry」の2つだけです。

 

受け取った data.no と data.country の値をテーブル内の no と country にセットして表示して終わりです。

 

PHPメニューへ戻る

 






関連記事
[PHP]配列

[PHP]雑記帳

[PHP]エラー例

PHPメニュー

[PHP]基礎・Switch