JSからPHPにJSONでリクエストが送れない
WordPressプラグインの作成中に以下のようなエラーで手こずりましたので、解決方法を記載します。
JS(XmlHttpRequest)でJSONが送れない
初めは下のようなコードでデータの送信を試みました。
// 下のメソッドは次のように書いても良い(JSの場合) => createXHR("POST", stateChangeMethod); let xhr = createXHR(stateChangeMethod, null, null); // JSONで送信する xhr.open("POST", 'http://xxxx.com/xxx.php'); xhr.send(JSON.stringify(data)); // 状態変化時のメソッド(コールバック関数と呼ばれる) function stateChangeMethod(res) { let READYSTATE_COMPLETED = 4; let HTTP_STATUS_OK = 200; if (res.target.readyState == READYSTATE_COMPLETED) { if(res.target.status == HTTP_STATUS_OK) { console.log("レスポンス取得: " + res.target.response); } else { alert("エラー: " + res.target.response); } } }
この処理は、XMLHttpwRequestを作成して指定のURLに下のJSONを送信するものです。
let data = {question: "aaa", answer: "bbb"};
そして、受診する側(PHP)は下のようなコードで受診しました。
// JSONリクエストを受け取る $data = $_POST['question']; echo $data;
しかし、下のようなエラーが出ました。
レスポンス取得: <br /> <b>Notice</b>: Undefined index: question in <b>/Users/takk/WP_DEV/wp/wp-content/plugins/CustomQuestionary/InsertQuestionary.php</b> on line <b>4</b><br />
ダメだったところ
ズバリ、PHPでJSONを取得するときは$_POST
とかが使えない。。。と言うところです。
なので、下のようなコードでJSONを取得します。
// JSONリクエストを受け取る $json = file_get_contents('php://input'); $data = json_decode($json); $question = $data->question;
これで、なんとか・・・
こんな感じで解消できました。
でわでわ。。。
関連ページ
- WordPress プラグイン作成〜DBを使用する〜
- PHP PDO 〜MySQLにアクセスする〜
- PHP Ajax 〜DBに登録したデータを受信する〜
- Google Maps API PHP連携 〜マップ情報をDBに登録する〜
- PHP Image File 〜iPhoneやAndroidでの画像送受信の問題〜
- AngularJS Routing 〜PHPをWeb APIにする〜
- WordPress PHPカスタム〜根本的に見た目を変える〜
- WordPress PHPカスタム〜根本的に見た目を変える2〜
- Eclipse PHPプラグイン 〜ElipseでWordPress環境を構築〜
- WordPress テスト実装 〜heade-test.phpを表示〜
- AngularJS + PHP 〜WordPressと連携する〜
- AngularJS + PHP 〜AngularJSの実装〜
- AngularJS + PHP 〜AngularJSの実装2〜
- WordPress 処理解析 ~index.phpを眺める~
- WordPress Plugin NewStatPress ~アクセス解析プラグインAPIを使う~
- WordPress 処理解析 ~ログイン処理を調べる~
- WordPressカスタム〜アンケートボタンを追加する(設計)〜
- WordPressカスタム〜プラグインの作成〜
- WordPressカスタム〜ダッシュボードのプラグイン画面作成〜
- WordPressカスタム〜ダッシュボードのプラグイン画面作成2〜
- WordPressカスタム〜ダッシュボードのプラグイン画面作成3〜
- WordPress プラグイン作成〜アンケート作成プラグインを作る〜
JS
関連ページ
- JS GoogleMaps API 〜オリジナル・データマップを作ろう〜
- 吹き出しにYoubetubeを埋め込む
- Ajax + XmlHttpRequest〜画像送信からDB登録して表示〜
- JS XmlHttpRequest 〜JSでの同期/非同期通信〜
- JS Google Maps API 〜GeoLocation 現在位置の取得〜
- AngularJS + PHP 〜AngularJSの実装〜
- AngularJS + PHP 〜AngularJSの実装2〜
- WordPress プラグイン作成 〜$wpdbでのSELECT〜
- WordPressプラグイン作成 〜HTML挿入まで完了〜
- WordPress プラグイン作成 〜アンケート挿入〜
- MAMP 起動設定 〜WordPressのテスト環境を作る〜
- MAMP WordPress 〜インポート時のエラー対処〜
- WordPress PHPカスタム〜根本的に見た目を変える2〜