長いタイトルになってしまいましたが、ようするにJSON形式なら受け渡しが楽になりますよということです。
まず、JQueryからPHPにJSON形式のデータを渡す方法(www/index.php)
- <meta charset="utf-8">
- <script src="lib/jquery/jquery-1.11.2.min.js" charset="utf-8"></script>
- <style media="screen">
- li {
- list-style: none;
- }
- </style>
- <title>Ajax Sample</title>
- <h1>Ajax sample</h1>
- <form action="index.php" method="post" enctype="multipart/form-data">
- <!-- <img decoding="async" id="img" src="src/read_0001.png"> -->
- <select name="data[Ajax][key]" id="AjaxKey">
- <option value="10000">10000</option>
- <option value="9999">9999</option>
- <option value="9998">9998</option>
- <option value="9997">9997</option>
- <option value="9996">9996</option>
- <option value="9995">9995</option>
- <option value="9994">9994</option>
- <option value="9993">9993</option>
- <option value="9992">9992</option>
- <option value="9991">9991</option>
- </select>
- <button type="button" id="btn">送信</button>
- </form>
- <script type="text/javascript">
- // 各フィールドから値を取得してJSONデータを作成
- $(function () {
- $("button#btn").click(function () {
- var value = $("#AjaxKey").val();
- var data = {
- VALUE:value
- };
- // 通信実行
- $.ajax({
- type: "post", // method = "POST"
- url: "ajax_api.php", // POST送信先のURL
- data: JSON.stringify(data), // JSONデータ本体
- contentType: 'application/json', // リクエストの Content-Type
- dataType: "json", // レスポンスをJSONとしてパースする
- success: function (json_data) { // 200 OK時
- console.log("success");
- var str = "";
- if (json_data.STATUS == 0) {
- console.log("json.success");
- str = str + json_data.STATUS + "\r\n";
- str = str + json_data.ERROR + "\r\n";
- if (json_data.RES != null) {
- str = str + json_data.RES.id + "\r\n";
- str = str + json_data.RES.name + "\r\n";
- str = str + json_data.RES.tel + "\r\n";
- }
- alert(str);
- } else {
- console.log("json.error");
- str = str + json_data.STATUS + "\r\n";
- str = str + json_data.ERROR + "\r\n";
- alert(str);
- }
- // 成功時処理
- location.reload();
- },
- error: function () { // HTTPエラー時
- console.log("error");
- },
- complete: function () { // 成功・失敗に関わらず通信が終了した際の処理
- }
- });
- });
- });
- </script>
JQueryからJSON形式のデータを受け取りPHPで連想配列にして他のURLにポストする方法(www/ajax_api.php)
ちなみに、ベーシック認証がない場合は、define(‘DEMO’, true);をdefine(‘DEMO’, false);へ
- <!--?php
- // 登録API
- define('SAMPLE_API', 'http://xxx.xxx.xxx.xxx/wwwapi/index.php');
- // デモ環境
- define('DEMO', true);
- $json = file_get_contents("php://input");
- // 文字化けするかもしれないのでUTF-8に変換
- $json = mb_convert_encoding($json, 'UTF8', 'ASCII,JIS,UTF-8,EUC-JP,SJIS-WIN');
- // オブジェクト毎にパース
- // trueを付けると連想配列として分解して格納してくれます。
- $obj = json_decode($json, true);
- // パースに失敗した時は処理終了
- if ($obj === NULL) {
- $jsonResult['STATUS'] = 1;
- $jsonResult['ERROR'] = "JSON受信に失敗しました。";
- } else {
- $jsonResult['STATUS'] = 0;
- $jsonResult['ERROR'] = "";
- $res = json_decode(demoApi($obj['VALUE']),true);
- if (emptyempty($res)) {
- $jsonResult['STATUS'] = 1;
- $jsonResult['ERROR'] = "情報が取得できませんでした。";
- }
- $jsonResult['RES'] = $res;
- }
- echo json_encode($jsonResult);
- /**
- * 会員情報取得API処理
- * @note
- */
- function demoApi($memberId) {
- //POSTデータ
- $data = array(
- "member_id" =--> "{$memberId}"
- );
- $data = http_build_query($data, "", "&");
- if (DEMO) {
- //header
- $header = array(
- 'User-Agent: My User Agent 1.0', //ユーザエージェントの指定
- 'Authorization: Basic ' . base64_encode('account:password'),//ベーシック認証
- "Content-Type: application/x-www-form-urlencoded",
- "Content-Length: " . strlen($data)
- );
- } else {
- //header
- $header = array(
- "Content-Type: application/x-www-form-urlencoded",
- "Content-Length: " . strlen($data)
- );
- }
- $context = array(
- "http" => array(
- "method" => "POST",
- "header" => implode("\r\n", $header),
- "content" => $data
- )
- );
- $res = file_get_contents(SAMPLE_API, false, stream_context_create($context));
- return $res;
- }
- ?>
POSTデータを頂き、情報(連想配列のID指定にしていますが、ご利用の際には、DBから取得する方法へもバージョンアップできます。)
を取得JSON形式の返信を頂く方法(wwwapi/index.php)
- <!--?php
- $memberArray = array(
- "10000" =--> array("id" => 10000,'name' => 'Name10000','tel' => "000100010001"),
- "9999" => array("id" => 9999,'name' => 'Name9999','tel' => "000900090009"),
- "9998" => array("id" => 9998,'name' => 'Name9998','tel' => "000900090008"),
- "9997" => array("id" => 9997,'name' => 'Name9997','tel' => "000900090007"),
- "9996" => array("id" => 9996,'name' => 'Name9996','tel' => "000900090006"),
- "9995" => array("id" => 9995,'name' => 'Name9995','tel' => "000900090005"),
- "9994" => array("id" => 9994,'name' => 'Name9994','tel' => "000900090004"),
- "9993" => array("id" => 9993,'name' => 'Name9993','tel' => "000900090003"),
- "9992" => array("id" => 9992,'name' => 'Name9992','tel' => "000900090002"),
- );
- $memberId = $_POST['member_id'];
- if(emptyempty($memberArray[$memberId])) {
- echo json_encode(array());
- }
- echo json_encode($memberArray[$memberId]);
- ?>
※jquery-1.11.2.min.jsは、特にふれていませんが、実行するには必要になります、ご注意ください。