非同期通信の実装 〜WordPressプラグインの作成準備〜

イントロダクション

今回は、非同期通信の実装とテストを行います。注意点としては、クライアントサイドのみの実装ですので7、サーバーサイド(PHP)まで処理が届くことを考慮に入れていません。ワードプレスのプラグインで非同期通信を行うのには、アクションフックを設定する必要があるようです。

XMLHttpRequest

前回は、XMLHttpRequestについて調べました。ちょっとしたコードも作成しました。

では、早速やりましょう!

非同期通信の実装

作成する非同期通信で使用するXMLHttpRequestは汎用的に使用したいのですが、今回は汎用化しないでプラグインのphpファイルで出力します。

具体的に。。。
下のようなダッシュボードの表示を行うためのHTMLを出力しているPHPファイルはmanage.phpと言うファイルです。gitにアップロードしてあるのでよかったら見てください。
そして、このファイルに下のようなコードを追加します。

/*
 * XMLHttpRequest生成のメソッド
 * @param methdoName GET or POST
 * @param sendURL リクエストの送信先のURL
 * @param btnId 謳歌したときに起動するボタンのID
 * @param stateChangeMethod レスポンス
 */
function createXHR(sendURL, btnId, stateChangeMethod, clickMethod) {
    xhr = new XMLHttpRequest();
    document.getElementById(btnId).addEventListener('click', clickMethod);
    xhr.onreadystatechange = stateChangeMethod;
    return xhr;
}

このメソッドはXMLHttpRequestを作成して返却します。

前回も記載しましたので細かいところは割愛しますが、作成したXMLHttpRequest(XHR)は下のようなメソッドを設定してやる必要があります。

  1. ステータス変更時の処理(メソッド)
  2. 送信先のURL

これらを引数で渡すようにしてあります。
function createXHR(methdName, sendURL, btnId, stateChangeMethod, clickMethod)

そして、プラグインのZIPファイルをインストールしたときに誰でも使用できるようにBootStrapのURLを指定しておきます。echo '<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.4.1/css/bootstrap.min.css">;';
さらに下のリンクはBootStrapのチュートリアルへのリンクです。

BootStrapのチュートリアル。

受診する側のPHPを作成する

今回の非同期通信は作成したアンケート情報をDBに登録する処理を行うために使用します。
なので、InsertQuestionary.phpと言うファイルを作成します。

JS側からの送信

リクエストにはGETとPOSTの2種類あります。
GETはデータの取得、公開して良い情報をパラメータとして渡す、などの使用方法があります。
今回は、公開したくない情報をリクエストするのでPOSTを使用します。
参考にしたサイトはこちらです。

送信時に詰まったこと

とりあえず詰まったのは送信するのにJSONで送信したことです。
送信時に以下のように実装する必要がありました。

    // JSONで送信する
    xhr.open("POST", '');
    xhr.setRequestHeader("Content-Type", "application/json");
    xhr.send(JSON.stringify(data));

そして、WebAPI側のPHPではJSONで取得するのでリクエストの取得とちょいと違う方法で取得する必要がありました。

ini_set('display_errors', "On");
// JSONリクエストを受け取る
$json = file_get_contents('php://input');
$data = json_decode($json);
$question = $data->question;
// (プラグインフォルダにあるので)WordPressはすでに読み込まれている
// データ登録用のグローバル変数
//$wpdb;

echo $question;

だいぶ遅くなってしまったので今日はここで失礼します。

JQueryを使う

WPでの実装では、jQueryがデフォルトで参照できるようです。。。なのでincludeの追記が必要ないと思われます。※自分の環境では必要ありませんでした。

送信処理のカタチ

そして、これを実装すると下のようになります。

$.ajax({
  //サーバに送信するリクエストの設定
)}
.done(function(){
  //通信に成功した場合の処理
})
.fail(function(){
  //通信に失敗した場合の処理
})

サンプルコード

REST通信などと呼ばれている方法では、JSONをリクエストで送信します。

    $.ajax({ 
      url: 'sample.php', // リクエスト送信するファイル
      type: 'POST',// HTMLを取得したいだけならGETでよい
      dataType: 'json' // 最近ではRESTなんて呼ばれている
    }).done(function(html) {
      console.log(html); // 正常レスポンス時の処理
    }).fail(function() {
      alert('エラーが起きました'); // 異常レスポンス時の処理
    });

でわでわ。。。


関連ページ

  1. WordPress プラグイン作成〜DBを使用する〜
  2. PHP PDO 〜MySQLにアクセスする〜
  3. PHP Ajax 〜DBに登録したデータを受信する〜
  4. Google Maps API PHP連携 〜マップ情報をDBに登録する〜
  5. PHP Image File 〜iPhoneやAndroidでの画像送受信の問題〜
  6. AngularJS Routing 〜PHPをWeb APIにする〜
  7. WordPress PHPカスタム〜根本的に見た目を変える〜
  8. WordPress PHPカスタム〜根本的に見た目を変える2〜
  9. Eclipse PHPプラグイン 〜ElipseでWordPress環境を構築〜
  10. WordPress テスト実装 〜heade-test.phpを表示〜
  11. AngularJS + PHP 〜WordPressと連携する〜
  12. AngularJS + PHP 〜AngularJSの実装〜
  13. AngularJS + PHP 〜AngularJSの実装2〜
  14. WordPress 処理解析 ~index.phpを眺める~
  15. WordPress Plugin NewStatPress ~アクセス解析プラグインAPIを使う~
  16. WordPress 処理解析 ~ログイン処理を調べる~
  17. WordPressカスタム〜アンケートボタンを追加する(設計)〜
  18. WordPressカスタム〜プラグインの作成〜
  19. WordPressカスタム〜ダッシュボードのプラグイン画面作成〜
  20. WordPressカスタム〜ダッシュボードのプラグイン画面作成2〜
  21. WordPressカスタム〜ダッシュボードのプラグイン画面作成3〜
  22. WordPress プラグイン作成〜アンケート作成プラグインを作る〜

投稿者:

takunoji

音響、イベント会場設営業界からIT業界へ転身。現在はJava屋としてサラリーマンをやっている。自称ガテン系プログラマー(笑) Javaプログラミングを布教したい、ラスパイとJavaの相性が良いことに気が付く。 Spring framework, Struts, Seaser, Hibernate, Playframework, JavaEE6, JavaEE7などの現場経験あり。 SQL, VBA, PL/SQL, コマンドプロント, Shellなどもやります。

コメントを残す